Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.90
Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
#1

как расширить массив - C++

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

Привет.Как правильно расширить массив.
Например.
У меня есть массив и я вывел все отрицательные элемены как их вставить после ну допустим второго элемента.
PS Массив не динамический.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2010, 20:49     как расширить массив
Посмотрите здесь:

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

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

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

Как расширить строку - C++
Всем привет. Нужно расширить строку exstr до 48, но как только выхожу за 32 то пишет что я выхожу за пределы. Как быть в данной ситуации? ...

Как расширить класс в С++? - C++
Требуется добавить в класс метод, не добавляя его в описание класса.Пример - библиотека <algorithm>. То есть есть у нас, скажем, файл типа...

Как расширить работоспособность программы - C++
Подскажите пожалуйста как сделать так чтобы программа работала при бОльших значениях...Вот у меня имеется программа для рекурсивного...

Как расширить окно консоли - C++
какой командой можно расширить окно консоли?а то у меня прога много выводит,и начало ,не с начала начинается,а где-то с центра самой...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
20.02.2010, 20:55     как расширить массив #2
К сожалению никакой массив расширить нельзя, даже динамический... может это такой прием речи - динамический, но на самом то деле придется память выделять совсем в другом месте, а предыдущую туда копировать и освобождать. В общем если у вас было 10 бубликов и тележка для 10 бубликов а потом стало нужно вместить 11 бубликов никакого выхода кроме заводить новую тележку лично я не вижу Или я не прав?...
Day
1154 / 959 / 57
Регистрация: 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>
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,507
20.02.2010, 21:49     как расширить массив #4
А в С++ лучше один из контейнеров использовать (vector, list, set, etc.. их много) и голову себе такими вещами не забивать
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
20.02.2010, 22:02     как расширить массив #5
К сожалению никакой массив расширить нельзя, даже динамический
все правильно, выделяй массив большего размера, копируй туда старый, только не забудь удалить его)
insideone
20.02.2010, 22:38
  #6

Не по теме:

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

easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,507
20.02.2010, 22:56     как расширить массив #7
Цитата Сообщение от insideone Посмотреть сообщение
30 раз это как уже серьёзно, вам не кажется?
не, контейнер list, как супербыстрый, никогда и не позиционировался... Велосипед там, конечно, серьёзный смастерили, только stl на контейнере list не заканчивается. Если нужно в начало очереди объекты вставлять, имеется двухсторонняя очередь - deque. Для быстрого доступа к произвольному из уникальных упорядоченных объектов - set... Да к тому же, чисто игрушечная тактика - отхватить сразу три версты памяти, а потом по ней шустро перемещаться...
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
20.02.2010, 22:57     как расширить массив #8
все правильно, выделяй массив большего размера, копируй туда старый, только не забудь удалить его)
realloc сам все скопирует.
Но твой подход тоже верен
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
20.02.2010, 23:06     как расширить массив #9
ага, пусть суть поймет!)
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
20.02.2010, 23:07     как расширить массив #10
Цитата Сообщение от easybudda Посмотреть сообщение
не, контейнер list, как супербыстрый, никогда и не позиционировался... Велосипед там, конечно, серьёзный смастерили, только stl на контейнере list не заканчивается. Если нужно в начало очереди объекты вставлять, имеется двухсторонняя очередь - deque. Для быстрого доступа к произвольному из уникальных упорядоченных объектов - set... Да к тому же, чисто игрушечная тактика - отхватить сразу три версты памяти, а потом по ней шустро перемещаться...
STL мне щас представляется как большой паровоз на котором можно хорошо кататься если знаешь где рулить. А до тех пор только толкать его можно, и выходит медленно. Спасибо за информацию не знал. Жаль так мало свободного времени, надо почитать какие нибудь момументальные труды про него, правда боюсь они толстые(

2 Day. А для new - delete же такого нет? Я просто ими всегда пользовался... Немного запутывает меня такая вариативость выделения ресурсов.
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,507
20.02.2010, 23:14     как расширить массив #11
insideone, я до недавнего времени практически всё на С писал, а на С++ подсел по прочтении книжки "Стандартная библиотека С++ на примерах" Пабло Халперн. Книжка тоненькая - с собой носить можно... Особо в детали там, правда, не вдаются, но общее представление про всю эту кухню получить можно. Для типовых задач, не требующих мега-скорости, или фанатичной экономии памяти очень удобно и экономит массу времени. А тонкости можно в справочниках почитать - MSDN например, или мне вот больше www.cplusplus.com нравится...
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
20.02.2010, 23:17     как расширить массив #12
А для new - delete же такого нет? Я просто ими всегда пользовался... Немного запутывает меня такая вариативость выделения ресурсов
а разве realloc не работает?

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

Нет, ну даже просто если подумать... Если память после массива в 10 элементов уже чем то занята? Как поступит realloc? Если "добавить" некуда... выделит и скопирует? Ну тогда в принципе то же самое что и new - delete
Day
1154 / 959 / 57
Регистрация: 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. Но это все - дело привычки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2010, 23:32     как расширить массив
Еще ссылки по теме:

Как расширить консольное окно - C++
Как расширить консольное окно, скажем на весь экран его растянуть

Как расширить длину строки до определённого значения? - C++
Подскажите,как расширить длину строки до определённого значения.

Как можно расширить STL своим набором функций? - C++
За предисловие сгодится то что я запорол контест из-за того, что юзал STL типа a.find(b) != string::npos Когда нормальные решения были...

Как добавить элемент в конец массива и расширить его на одну позицию? - C++
как добавить элемент в конец? просидел 5 часов , прошустрил кучу сайтов и не сообразил. (через vector не подходит) #define N 100 ...

Расширить консольное окно до полного экрана - C++
В принципе вопрос в оглавлении. Думаю есть такая функция. В гугле поискал, но ничего в итоге. Добавлено через 1 час 14 минут Ну так...


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,507
20.02.2010, 23:32     как расширить массив #15
Цитата Сообщение от insideone Посмотреть сообщение
Как поступит realloc? Если "добавить" некуда... выделит и скопирует?
Оставит, как было. А по поводу не смешивать new/delete и malloc/free - очень правильный совет!
Yandex
Объявления
20.02.2010, 23:32     как расширить массив
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru