Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/131: Рейтинг темы: голосов - 131, средняя оценка - 4.97
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
1

как расширить массив

20.02.2010, 20:49. Показов 25723. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет.Как правильно расширить массив.
Например.
У меня есть массив и я вывел все отрицательные элемены как их вставить после ну допустим второго элемента.
PS Массив не динамический.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2010, 20:49
Ответы с готовыми решениями:

Как расширить динамический массив НЕ используя stl
То есть создал я массив: int *arr = new int n-какое-то значение А дальше я хочу сделать...

Свой класс вектор. Как расширить динамический массив
#include <iostream> using namespace std; template<typename T> class Vector { private: int...

Расширить динамический массив
Есть програмка в которой можно внести даные про оформленые заявки на оренду машин. Каждая заявка...

Расширить массив из цифр
Нужно расширить старый массив чисел, из 4х чисел должно получиться 6 (берем входной блок из 4х...

15
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
20.02.2010, 20:55 2
К сожалению никакой массив расширить нельзя, даже динамический... может это такой прием речи - динамический, но на самом то деле придется память выделять совсем в другом месте, а предыдущую туда копировать и освобождать. В общем если у вас было 10 бубликов и тележка для 10 бубликов а потом стало нужно вместить 11 бубликов никакого выхода кроме заводить новую тележку лично я не вижу Или я не прав?...
0
Day
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
20.02.2010, 21:46 3
Если массив не динамический, можно только сразу задать его необходимого объема
Например, исходный массив - 10 чисел, а ты пишешь
int M[40];
И в пределах этих 40 - делай чего хочешь - эта память твоя.
Для динамического делается так:
int *M;
M = (int *)malloc(10*sizeof(int));
......
Выяснилось, что нужно 15 элементов:
M = (int *)realloc(M, 15*sizeof(int));
Первые 10 элементов нового массива будут те же, что и в старом M,
остальные 5 - не определены, т.е. в них какой-то мусор, но смело их можешь заполнять.

ЗЫ: Не забудь вставить #include <alloc.h>
2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12457 / 7481 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
20.02.2010, 21:49 4
А в С++ лучше один из контейнеров использовать (vector, list, set, etc.. их много) и голову себе такими вещами не забивать
2
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
20.02.2010, 22:02 5
К сожалению никакой массив расширить нельзя, даже динамический
все правильно, выделяй массив большего размера, копируй туда старый, только не забудь удалить его)
0
insideone
20.02.2010, 22:38
  #6

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
А в С++ лучше один из контейнеров использовать (vector, list, set, etc.. их много) и голову себе такими вещами не забивать
http://www.gamedev.ru/code/articles/?id=4228 всегда ли?
Результаты теста показывают, что полученный список работает на порядок быстрее (до 30 раз) чем стандартный при операциях вставки и удаления элементов и до 4х раз быстрее при перемещении по списку.
30 раз это как уже серьёзно, вам не кажется? :)

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12457 / 7481 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
20.02.2010, 22:56 7
Цитата Сообщение от insideone Посмотреть сообщение
30 раз это как уже серьёзно, вам не кажется?
не, контейнер list, как супербыстрый, никогда и не позиционировался... Велосипед там, конечно, серьёзный смастерили, только stl на контейнере list не заканчивается. Если нужно в начало очереди объекты вставлять, имеется двухсторонняя очередь - deque. Для быстрого доступа к произвольному из уникальных упорядоченных объектов - set... Да к тому же, чисто игрушечная тактика - отхватить сразу три версты памяти, а потом по ней шустро перемещаться...
1
Day
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
20.02.2010, 22:57 8
все правильно, выделяй массив большего размера, копируй туда старый, только не забудь удалить его)
realloc сам все скопирует.
Но твой подход тоже верен
0
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
20.02.2010, 23:06 9
ага, пусть суть поймет!)
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
20.02.2010, 23:07 10
Цитата Сообщение от easybudda Посмотреть сообщение
не, контейнер list, как супербыстрый, никогда и не позиционировался... Велосипед там, конечно, серьёзный смастерили, только stl на контейнере list не заканчивается. Если нужно в начало очереди объекты вставлять, имеется двухсторонняя очередь - deque. Для быстрого доступа к произвольному из уникальных упорядоченных объектов - set... Да к тому же, чисто игрушечная тактика - отхватить сразу три версты памяти, а потом по ней шустро перемещаться...
STL мне щас представляется как большой паровоз на котором можно хорошо кататься если знаешь где рулить. А до тех пор только толкать его можно, и выходит медленно. Спасибо за информацию не знал. Жаль так мало свободного времени, надо почитать какие нибудь момументальные труды про него, правда боюсь они толстые(

2 Day. А для new - delete же такого нет? Я просто ими всегда пользовался... Немного запутывает меня такая вариативость выделения ресурсов.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12457 / 7481 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
20.02.2010, 23:14 11
insideone, я до недавнего времени практически всё на С писал, а на С++ подсел по прочтении книжки "Стандартная библиотека С++ на примерах" Пабло Халперн. Книжка тоненькая - с собой носить можно... Особо в детали там, правда, не вдаются, но общее представление про всю эту кухню получить можно. Для типовых задач, не требующих мега-скорости, или фанатичной экономии памяти очень удобно и экономит массу времени. А тонкости можно в справочниках почитать - MSDN например, или мне вот больше www.cplusplus.com нравится...
1
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
20.02.2010, 23:17 12
А для new - delete же такого нет? Я просто ими всегда пользовался... Немного запутывает меня такая вариативость выделения ресурсов
а разве realloc не работает?

какая вариативность, компилятор вместо new и delete подставит malloc и free если я не ошибаюсь
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
20.02.2010, 23:23 13
Цитата Сообщение от DeadRipper Посмотреть сообщение
а разве realloc не работает?
На самом деле в книге Скотта Майерса где 50 советов я читал что смещивать пары new - delete, malloc - free очень неправильно. Я вообще пользовался всегда только new - delete поэтому совет как то мимо ушей пролетел, а книги щас под рукой нет чтобы мог процитировать.

Нет, ну даже просто если подумать... Если память после массива в 10 элементов уже чем то занята? Как поступит realloc? Если "добавить" некуда... выделит и скопирует? Ну тогда в принципе то же самое что и new - delete
0
Day
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
20.02.2010, 23:25 14
2 Day. А для new - delete же такого нет? Я просто ими всегда пользовался... Немного запутывает меня такая вариативость выделения ресурсов.
Не, я такого не слыхал. ReNew, да?
Но впрочем, realloc делает почти в точности то, что говорит DeadRipper, просто функция такая.
Никто не мешает тебе сделать такое
Код
ReNew(X, n) {
   Y = new .. [n];
   // Перепись X -> Y
   delete X
   return Y;
}
Только там чего-то с типами будет, наверное, шаблоны надо применить, я в этом не силен.
А вариатативность... Да бог с ней! Привык к new - delete - и ладушки
У new еще и конструктор-деструктор есть, т.е. местами без него - никак.
Мне когда просто память нужна - malloc, а уж ежели объект с инициализациями всякими -
тогда уж - new. Но это все - дело привычки
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12457 / 7481 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
20.02.2010, 23:32 15
Цитата Сообщение от insideone Посмотреть сообщение
Как поступит realloc? Если "добавить" некуда... выделит и скопирует?
Оставит, как было. А по поводу не смешивать new/delete и malloc/free - очень правильный совет!
0
Day
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
20.02.2010, 23:48 16
easybudda,
Оставит, как было.
А не выдаст ли NULL ? (но старое оставит!)
Для программы это все равно почти всегда означает конец нормальной работы.
Если тебе нужна память, а ее нету - все, сматывай удочки, ищи ошибку, меняй алгоритм!
А если можно по сусекам еще памяти наскрести - то где ты был раньше?
0
20.02.2010, 23:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2010, 23:48
Помогаю со студенческими работами здесь

Пункт Расширить том в Windows Vista Home Basic не активен - Как же расширить?
Товарищи, здравствуйте. Подскажите, пожалуйста, а как же расширить в Vista Home Basic том C...

Как расширить массив, не используя arrays.copy
Пробую написать метод для расширения масива при добавлении елемента по чсету большего чем размер...

Расширить массив вручную
Добрый вечер друзья, в общем такое задание у меня по алгоритмам появилось и дабы не терять времени...

Расширить двумерный массив с#
Здравствуйте int m, n; Console.WriteLine(&quot;Укажите размерность по...

Обобщенный класс. Расширить одномерный массив при обращении к несуществующему элементу
Подскажите как выполнить такую задачу? &quot;Создать обобщенный класс для представления одномерного...

Как расширить класс?
Допустим есть класс QTreeWidget. Как сделать, чтобы у него дополнительно (в каждом экземпляре)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru