Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Можно ли обрезать размер массива


Автор: gray_k 24.11.2003, 12:53
Такой вопрос.
Предположим мне надо заполнить массив, точное количество элементов которого я не знаю, но знаю максимально возможное.
Массив заполняется из другого массива по определённому условию.
я делаю так:
Код

int *Id = new int[MAX_SIZE];
int MySize = 0;
for(int i=0; i<MAX_SIZE; i++)
{
 if(INITIAL_ARRAY[i] > 0)
 {
   Id[MySize++] = INITIAL_ARRAY[i];
 }
}

После выполнения этого кода мы имеем массив Id, заполненный до (MySize-1)-го элемента.
Можно ли теперь не создавая новый массив, и не проходя в цикле по всем значениям Id, назначить массиву размер MySize вместо MAX_SIZE.

Автор: val 24.11.2003, 13:58
Мне кажется, что нет.

Автор: Paradox 24.11.2003, 14:55
К соответствующему топику могу добавить что SetLength

Автор: gray_k 24.11.2003, 14:59
Нет. SetLength определён только для массивов-строк AnsiString и WideString

Автор: Paradox 24.11.2003, 15:06
Ну а чтонибудь похожее ведь должно быть для динамических массивов (я тебе советую по аналогии с Дельфи и билдером)

Автор: Ars 24.11.2003, 17:12
Посмотри про CoTaskMemRealloc()

Автор: gray_k 24.11.2003, 17:34
Цитата
Посмотри про CoTaskMemRealloc()

Посмотрел. Только у меня он в программе не компилится. Не подскажешь какой хидер надо подключить.
У меня С++ Билдер 6.

Автор: Ars 24.11.2003, 17:38
Цитата
Header: Declared in objbase.h.
Library: Use ole32.lib.

Автор: bel_nikita 24.11.2003, 17:57
Цитата
Можно ли теперь не создавая новый массив, и не проходя в цикле по всем значениям Id, назначить массиву размер MySize вместо MAX_SIZE.

А так не пробывал.
for (int i=MySize;i<MAX_SIZE;i++)
delete Id[i];

Автор: Albinos 24.11.2003, 19:03
Цитата
А так не пробывал.
for (int i=MySize;i<MAX_SIZE;i++)
delete Id[i];


Такая фишка не прокатит. И наверняка вызовет ошибку: delete будет считать, что в Id[i] содержится адрес переменной, под которую динамически выделялась память. В итоге начнет удалять не то.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)