1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
|
|
1 | |
как расширить массив20.02.2010, 20:49. Показов 25723. Ответов 15
Метки нет (Все метки)
Привет.Как правильно расширить массив.
Например. У меня есть массив и я вывел все отрицательные элемены как их вставить после ну допустим второго элемента. PS Массив не динамический.
0
|
20.02.2010, 20:49 | |
Ответы с готовыми решениями:
15
Как расширить динамический массив НЕ используя stl Свой класс вектор. Как расширить динамический массив Расширить динамический массив Расширить массив из цифр |
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
20.02.2010, 20:55 | 2 |
К сожалению никакой массив расширить нельзя, даже динамический... может это такой прием речи - динамический, но на самом то деле придется память выделять совсем в другом месте, а предыдущую туда копировать и освобождать. В общем если у вас было 10 бубликов и тележка для 10 бубликов а потом стало нужно вместить 11 бубликов никакого выхода кроме заводить новую тележку лично я не вижу Или я не прав?...
0
|
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
|
Модератор
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
|
Не по теме: http://www.gamedev.ru/code/articles/?id=4228 всегда ли?
0
|
Модератор
12457 / 7481 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
|
|
20.02.2010, 22:56 | 7 |
не, контейнер list, как супербыстрый, никогда и не позиционировался... Велосипед там, конечно, серьёзный смастерили, только stl на контейнере list не заканчивается. Если нужно в начало очереди объекты вставлять, имеется двухсторонняя очередь - deque. Для быстрого доступа к произвольному из уникальных упорядоченных объектов - set... Да к тому же, чисто игрушечная тактика - отхватить сразу три версты памяти, а потом по ней шустро перемещаться...
1
|
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
|
|
20.02.2010, 23:06 | 9 |
ага, пусть суть поймет!)
0
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
20.02.2010, 23:07 | 10 |
STL мне щас представляется как большой паровоз на котором можно хорошо кататься если знаешь где рулить. А до тех пор только толкать его можно, и выходит медленно. Спасибо за информацию не знал. Жаль так мало свободного времени, надо почитать какие нибудь момументальные труды про него, правда боюсь они толстые(
2 Day. А для new - delete же такого нет? Я просто ими всегда пользовался... Немного запутывает меня такая вариативость выделения ресурсов.
0
|
Модератор
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 подставит malloc и free если я не ошибаюсь
0
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
20.02.2010, 23:23 | 13 |
На самом деле в книге Скотта Майерса где 50 советов я читал что смещивать пары new - delete, malloc - free очень неправильно. Я вообще пользовался всегда только new - delete поэтому совет как то мимо ушей пролетел, а книги щас под рукой нет чтобы мог процитировать.
Нет, ну даже просто если подумать... Если память после массива в 10 элементов уже чем то занята? Как поступит realloc? Если "добавить" некуда... выделит и скопирует? Ну тогда в принципе то же самое что и new - delete
0
|
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
|
|
20.02.2010, 23:25 | 14 |
Но впрочем, realloc делает почти в точности то, что говорит DeadRipper, просто функция такая. Никто не мешает тебе сделать такое Код
ReNew(X, n) { Y = new .. [n]; // Перепись X -> Y delete X return Y; } А вариатативность... Да бог с ней! Привык к new - delete - и ладушки У new еще и конструктор-деструктор есть, т.е. местами без него - никак. Мне когда просто память нужна - malloc, а уж ежели объект с инициализациями всякими - тогда уж - new. Но это все - дело привычки
1
|
Модератор
12457 / 7481 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
|
|
20.02.2010, 23:32 | 15 |
Оставит, как было. А по поводу не смешивать new/delete и malloc/free - очень правильный совет!
0
|
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
|
|
20.02.2010, 23:48 | 16 |
easybudda,
Для программы это все равно почти всегда означает конец нормальной работы. Если тебе нужна память, а ее нету - все, сматывай удочки, ищи ошибку, меняй алгоритм! А если можно по сусекам еще памяти наскрести - то где ты был раньше?
0
|
20.02.2010, 23:48 | |
20.02.2010, 23:48 | |
Помогаю со студенческими работами здесь
16
Пункт Расширить том в Windows Vista Home Basic не активен - Как же расширить? Как расширить массив, не используя arrays.copy Расширить массив вручную Расширить двумерный массив с# Обобщенный класс. Расширить одномерный массив при обращении к несуществующему элементу Как расширить класс? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |