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

Массивы и векторы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Nequti
 Аватар для Nequti
246 / 51 / 1
Регистрация: 21.05.2011
Сообщений: 297
02.06.2011, 14:23     Массивы и векторы #1
Вопрос по теме . Что лучше использовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2011, 14:23     Массивы и векторы
Посмотрите здесь:

векторы С++ C++
C++ Векторы!!!
Векторы! C++
C++ Векторы
C++ Одномерные массивы (векторы)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
02.06.2011, 14:24     Массивы и векторы #2
что лучше, камаз или велосипед?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
02.06.2011, 14:26     Массивы и векторы #3
Векторы удобнее. И по скорости проигрывают на доли процента, если правильно скомпилировать.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 14:27     Массивы и векторы #4
массив - если число элементов заранее известно. vector - соответсвенно, если не известно. А если планируется часто удалять и добавлять элементы в середину, то лист
Nequti
 Аватар для Nequti
246 / 51 / 1
Регистрация: 21.05.2011
Сообщений: 297
02.06.2011, 14:30  [ТС]     Массивы и векторы #5
Спасибо
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
02.06.2011, 14:32     Массивы и векторы #6
Цитата Сообщение от pito211 Посмотреть сообщение
массив - если число элементов заранее известно. vector - соответсвенно, если не известно
Интересненько.

Цитата Сообщение от pito211 Посмотреть сообщение
А если планируется часто удалять и добавлять элементы в середину, то лист
А если в конец или в начало?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 14:52     Массивы и векторы #7
Цитата Сообщение от gooseim Посмотреть сообщение
А если в конец или в начало?
так же как и в середину(лист быстрее). Хотя при добавлении в конец примерно равны, кроме тех случаев когда size == capacity у вектора
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
02.06.2011, 14:59     Массивы и векторы #8
Цитата Сообщение от pito211 Посмотреть сообщение
Хотя при добавлении в конец примерно равны, кроме тех случаев когда size == capacity у вектора
Если память под вектор зарезервирована, при добавлении в конец вектор будет быстрее. В остальных случаях список предпочтительней.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 15:10     Массивы и векторы #9
Цитата Сообщение от gooseim Посмотреть сообщение
Если память под вектор зарезервирована, при добавлении в конец вектор будет быстрее
при очень больших размерах вектор проиграет и при добавлении в конец.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
02.06.2011, 15:15     Массивы и векторы #10
Цитата Сообщение от pito211 Посмотреть сообщение
при очень больших размерах вектор проиграет и при добавлении в конец.
Почему?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 15:34     Массивы и векторы #11
Цитата Сообщение от gooseim Посмотреть сообщение
Почему?
Рано или поздно копирование станет очень накладным делом и перебьёт тот профит, который был получен вначале. Вопрос лишь в объёме данных.
Nequti
 Аватар для Nequti
246 / 51 / 1
Регистрация: 21.05.2011
Сообщений: 297
02.06.2011, 15:34  [ТС]     Массивы и векторы #12
Плиз, пишите друг другу в личку , спс за понимание.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
02.06.2011, 15:45     Массивы и векторы #13
Цитата Сообщение от pito211 Посмотреть сообщение
Рано или поздно копирование станет очень накладным делом и перебьёт тот профит, который был получен вначале. Вопрос лишь в объёме данных.
О каком копировании вы говорите? Не совсем вас понимаю.
При резервировании памяти вектора (reserve) и последующим добавлении нового элемента в конец происходит просто присвоение. В случае же со списком в любом случае происходит выделении памяти при каждом новом добавлении.

Добавлено через 6 минут
Я имею ввиду не резервирование памяти вектором на внутреннем уровне после окончании лимита, а про резервировании программистом, столько памяти, сколько действительно нужно.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
02.06.2011, 15:50     Массивы и векторы #14
вектор и лист - вроде как для разного надо юзать - это не взаимозаменяемые контейнеры
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 15:55     Массивы и векторы #15
Internally, vectors -like all containers- have a size, which represents the amount of elements contained in the vector. But vectors, also have a capacity, which determines the amount of storage space they have allocated, and which can be either equal or greater than the actual size. The extra amount of storage allocated is not used, but is reserved for the vector to be used in the case it grows. This way, the vector does not have to reallocate storage on each occasion it grows, but only when this extra space is exhausted and a new element is inserted (which should only happen in logarithmic frequence in relation with its size).
это про то что я говорил. Если size==capacity, происходит, цитирую reallocation. Что это такое?
Reallocations may be a costly operation in terms of performance, since they generally involve the entire storage space used by the vector to be copied to a new location
то есть вектор берёт и целиком переносит свою бренную тушку в другой участок памяти и подчищает старый в случае size==capacity

а reserve это частный случай, когда известно на какие примерно объёмы расчитан вектор. А в общем случае, если размер вектора не известен примерно и он в результате окажется огромным, то...
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
02.06.2011, 16:03     Массивы и векторы #16
а reserve это частный случай, когда известно на какие примерно объёмы расчитан вектор. А в общем случае, если размер вектора не известен примерно и он в результате окажется огромным, то...
Я говорил именно про reserve. Про остальные случаи я согласен.
C++
1
вектор и лист - вроде как для разного надо юзать - это не взаимозаменяемые контейнеры
Все, что можно сделать с помощью list, можно сделать и с помощью vector (обратное не верно, по крайней мере стандартными средствами).
Только цена вопроса в производительности.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 16:33     Массивы и векторы
Еще ссылки по теме:

Одномерные массивы (векторы): вычислить и напечатать значения функции Y= Ak2 + Ak - sin Ak, где элементы массива А вводятся с клавиатуры C++
Массивы векторы C++
C++ Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?

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

Или воспользуйтесь поиском по форуму:
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
02.06.2011, 16:33     Массивы и векторы #17
следуя логике, делаем вывод что вектор более универсален, а следовательно более медлен в конкретном частном случае
Yandex
Объявления
02.06.2011, 16:33     Массивы и векторы
Ответ Создать тему
Опции темы

Текущее время: 12:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru