Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динам. массив, добавление элемента 
:(
    Опции темы
gepard
  Дата 21.10.2004, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Допустим есть:
Код

...
float* f=new float[2];
f[0]=1.3;
f[1]=2.3;
...

Как мне добавить к этому массиву ещё один элемент не теряя значения предыдущих?
Если я сделаю так:
Код

f=new float[3];

То предыдущие значения будут утеряны.
Как быть?


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
dargaard
Дата 21.10.2004, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 4
Всего: 25



Создать новыи массив. перекинуть резултат из старого в новый. По другому никак - посему и используют люди линк-листы, чтоб можно было по ходу деиствия уменьшать /увеличивать "массив" даных.


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 21.10.2004, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



посмотри ф-цию realloc из CRT (есть в MSDN-е).


--------------------
user posted image
PM MAIL WWW   Вверх
gepard
Дата 21.10.2004, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



dargaard
Цитата
Создать новыи массив. перекинуть резултат из старого в новый. По другому никак - посему и используют люди линк-листы, чтоб можно было по ходу деиствия уменьшать /увеличивать "массив" даных.

Во изврат-то! :stena
mr.DUDA
Посмотрим...


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Vaulter
Дата 21.10.2004, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



Код
std::vector<float> f;



--------------------
PM MAIL WWW ICQ   Вверх
Alex101
Дата 21.10.2004, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: нет
Всего: 10



Цитата(dargaard @ 21.10.2004, 04:11)
Создать новыи массив. перекинуть резултат из старого в новый. По другому никак - посему и используют люди линк-листы, чтоб можно было по ходу деиствия уменьшать /увеличивать "массив" даных.

Функция void *realloc( void *memblock, size_t size );
изменяет размер памяти, перенося при этом ее содержимое. Извращаться с массивами необязательно.
memblock - старая область,
size - размер в байтах (новый, т.е. старый_размер+еще)

Посмотри также GlobalReAlloc, но для твоего примера, думаю, нужен realloc



--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
gepard
Дата 21.10.2004, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Vaulter
Ты ошибся темой? :)


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Vaulter
Дата 21.10.2004, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



gepard

Цитата
The template class describes an object that controls a varying-length sequence of elements of type T. The sequence is stored as an array of T.
Vector reallocation occurs when a member function must grow the controlled sequence beyond its current storage capacity.


в переводе на русский и понятный: vector - контейнер для динамических массивов ;)
для добавления:
Код
void push_back(const T& x);

The member function inserts an element with value x at the end of the controlled sequence.
удаление последнего
Код
void pop_back();

The member function removes the last element of the controlled sequence, which must be non-empty.
изменение размера
Код
void resize(size_type n, T x = T());

для твоего случая можно написать:
Код

...
#include <vector>
std::vector<float> f;
f.push_back(1.3);
f.push_back(2.3);
...
//добавляем еще один, И! значения предыдущих как и во всех дин. массивах не теряются;)
f.push_back(4);
//смотрим
for(int i=0;i<3;i++)
   printf("f[%d]= %f\n",i,f[i]);



--------------------
PM MAIL WWW ICQ   Вверх
gepard
Дата 21.10.2004, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Не, это не для меня.
Запомни на будущее: я ненавижу стандарты.
Лучше сам буду изобретать велосипед :stena


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
chipset
Дата 21.10.2004, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



gepard
Тот же самый realloc только в оболочке... :hmmm
Из STL vector очень даже ничаво.. :notify


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Vaulter
Дата 21.10.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



gepard
если изобретешь быстрее и удобнее, то пиши в Microsoft или еще куда, оторвут с руками ;)


--------------------
PM MAIL WWW ICQ   Вверх
Adil'
Дата 21.10.2004, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер

Репутация: 6
Всего: 15



gepard, не советую использовать realloc с памятью, занятой оператором new - будут глюки. realloc работает с alloc и т.п.

А чем тебе не понравилось то, что предложил dargaard? - 3 cтрочки кода, можно в функцию вынести...

Это сообщение отредактировал(а) Adil' - 21.10.2004, 16:30


--------------------
Удачи
PM MAIL WWW   Вверх
chipset
Дата 21.10.2004, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Vaulter
Ещё можно в boost.. :rolleyes


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Alex101
Дата 21.10.2004, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: нет
Всего: 10



Цитата(Adil @ 21.10.2004, 13:29)
gepard, не советую использовать realloc с памятью, занятой оператором new - будут глюки. realloc работает с alloc и т.п.

Вроде как уже new и malloc одно и тоже?....


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
cardinal
Дата 21.10.2004, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата(gepard @ 21.10.2004, 04:18)
Как мне добавить к этому массиву ещё один элемент не теряя значения предыдущих?

ИМХО для этого были придуманы динамические массивы.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.