Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2018, 18:26   #1
novuiPolzovatel
 
Регистрация: 29.03.2012
Сообщений: 8
По умолчанию Уменьшить размер динамического массива несколько раз

Нужно уменьшить размер массива

int size_a = 10;
int *a = new int[size_a];

Если нужно уменьшить один раз, то всё понятно: создаём ещё один массив, копируем элементы, старый удаляем

int size_b=size_a-1;
int *b = new int[size_b];
for (i=0;i<=size_b;i++)
b[i]=a[i];
delete[] a;

А если, например, уменьшать нужно последовательно в теле цикла большое количество раз, то как поступить?
novuiPolzovatel вне форума Ответить с цитированием
Старый 01.06.2018, 19:14   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Так, может-быть, тогда и не уменьшать его динамически, а просто записывать меньшее количество элементов. Память - это не игрушка, все-таки.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 02.06.2018, 02:03   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Дык может, они пишут shrink_to_fit какой-нибудь.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 03.06.2018, 00:40   #4
c3nwen
 
Аватар для c3nwen
 
Регистрация: 01.06.2018
Сообщений: 9
По умолчанию

Я новичок, но возможно такая идея поможет:
Код:
// 1. Создаем точку входа в массив, с которой будем начинать последовательные изменения
int mpos = 0; // Индекс элемента
int mi = arr[0]; // Значение индекса элемента
for (int i = 1; i < length; i++)
	if (arr[i] < mi)
	{
		mi = arr[i];
		mpos = i;
	}
// 2. Создаем новый массив и копируем значения индексов со сдвигом 1
int *arr = new int[length];
for (mpos; mpos < length; mpos++) // Начинаем цикл элементом с нужным значением
{
	if (mpos != length - 1) // Если текущий элемент не равен крайнему элементу массива, копируем данные с соседнего элемента
		arr[mpos] = arr[mpos + 1];
	else break;
}
/* Второе действие вставляем в условие изменения изначального массива или отдельную функцию или метод класса к примеру, смотря что там за код.
Вызывем его на каждое изменение*/
c3nwen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемешивание двумерного массива несколько раз без повторений Silveronn C++ Builder 0 20.05.2015 16:56
Как уменьшить размер фото nikolj HTML и CSS 1 27.11.2011 14:53
Размер динамического массива не через Length Sibedir Общие вопросы Delphi 10 29.08.2009 21:26
Напомните как задать размер динамического массива Arassir Помощь студентам 4 08.03.2009 13:02
уменьшить размер БД MS Access Кот из Лета БД в Delphi 7 30.12.2007 13:51