Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Динамический массив ( С++ )  (Прочитано 1198 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн tro9an

  • Автор темы
  • Любитель
  • *
  • Сообщений: 55
    • Просмотр профиля
Динамический массив ( С++ )
« : 30 Октября 2011, 21:33:29 »
Создал я массив:
int a = 9;
int* arr = new int [ a ]
for ( int j = 0; j < a; j++ )
arr [ j ] = j;
Массив на 10 ячеек, но тут мне вдруг захотелось сделать его на 12 ячеек сохранив все параметры ( числа в заполнених ячейках ) и добавив две пустые. Как это сделать?
« Последнее редактирование: 30 Октября 2011, 21:44:35 от tro9an »

Оффлайн serg..2000

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Динамический массив ( С++ )
« Ответ #1 : 30 Октября 2011, 21:46:23 »
если строго, то
создать массив на 11 и перезаписать - скопировать
или использовать vector<int> - он сделает это сам

Оффлайн tro9an

  • Автор темы
  • Любитель
  • *
  • Сообщений: 55
    • Просмотр профиля
Re: Динамический массив ( С++ )
« Ответ #2 : 30 Октября 2011, 21:50:16 »
А к существующему массиву "прицепить" пустые ячейки, не перезаписывая его, никак нельзя?

Оффлайн Mr. Leon

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Динамический массив ( С++ )
« Ответ #3 : 30 Октября 2011, 22:57:28 »
Может быть посмотреть в сторону контейнерных классов?
Землю крестьянам фазу электрикам!

Оффлайн serg..2000

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Динамический массив ( С++ )
« Ответ #4 : 31 Октября 2011, 00:02:42 »
А к существующему массиву "прицепить" пустые ячейки, не перезаписывая его, никак нельзя?
На низком уровне может и можно, а на c++ , IMHO, нет.
(realloc() - но он тоже может возвратить новый указатель)

Оффлайн El Scorpio

  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Re: Динамический массив ( С++ )
« Ответ #5 : 31 Октября 2011, 06:36:25 »
А к существующему массиву "прицепить" пустые ячейки, не перезаписывая его, никак нельзя?
pArray = realloc (pArray, newsize);
Эта команда позволяет изменить размер массива, однако при этом
1. Может измениться адрес массива (если в исходном размещении нет свободного места)
2. Эта команда может конфликтовать с new/delete, поскольку "как-то иначе" работает с памятью

Вместо new/delete для указанного массива нужно использовать malloc/free. Или просто один лишь realloc - он достаточно универсален
pArray = realloc (NULL, newsize) - выделение памяти
realloc (pArray, 0) - высвобождение памяти
И разумеется, при использовании массивов объектов конструкторы и деструкторы придётся вызывать вручную :)

Оффлайн Tonal

  • Любитель
  • *
  • Сообщений: 82
  • Карма Кагью
    • Просмотр профиля
Re: Динамический массив ( С++ )
« Ответ #6 : 31 Октября 2011, 09:53:31 »
ins size = 9;
std::vector arr(size);
for (int j = 0; j < size; j++)
  arr[j] = j;
arr.resize(size + 3);

Axa-Ru

  • Гость
Re: Динамический массив ( С++ )
« Ответ #7 : 31 Октября 2011, 09:55:31 »
Может быть посмотреть в сторону контейнерных классов?
Ага. http://www.cplusplus.com/reference/stl/vector/

Оффлайн Дядюшка Ау

  • Участник
  • *
  • Сообщений: 123
  • Дайте две!
    • Просмотр профиля
Re: Динамический массив ( С++ )
« Ответ #8 : 09 Ноября 2011, 15:55:33 »
Позволю себе добавить, что если использовать vector, то лучше заранее зарезервировать наиболее вероятные приращения размера с помощью vector::reserve.
Ubuntu 12.04 для поколупацца, Win7 для поработать

 

Страница сгенерирована за 0.051 секунд. Запросов: 25.