Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Nequti
246 / 51 / 1
Регистрация: 21.05.2011
Сообщений: 297
#1

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

02.06.2011, 14:23. Просмотров 1627. Ответов 16
Метки нет (Все метки)

Вопрос по теме . Что лучше использовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2011, 14:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массивы и векторы (C++):

Массивы векторы
Здравствуйте,недавно начал изучать c++.Разобрался с...

Одномерные массивы (векторы)
помогите мне не остаться на летний семестр! Одномерные массивы (векторы) 3. ...

Одномерные массивы (векторы): вычислить и напечатать значения функции Y= Ak2 + Ak - sin Ak, где элементы массива А вводятся с клавиатуры
Вычислить и напечатать значения функции Y= Ak2 + Ak - sin Ak где элементы...

Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?
Привет всем! Помогите правильно алгоритм выбрать. Надо получать из файлов...

Векторы
Здравствуйте. Использую векторы типа vector<string> sentence;. Описываю их в...

Векторы
Даны векторы x и y размерности n, и квадратные матрицы А и В размерности n*n....

16
co6ak
Кошковед
515 / 503 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
02.06.2011, 14:24 #2
что лучше, камаз или велосипед?
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
02.06.2011, 14:26 #3
Векторы удобнее. И по скорости проигрывают на доли процента, если правильно скомпилировать.
1
pito211
186 / 173 / 18
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 14:27 #4
массив - если число элементов заранее известно. vector - соответсвенно, если не известно. А если планируется часто удалять и добавлять элементы в середину, то лист
0
Nequti
246 / 51 / 1
Регистрация: 21.05.2011
Сообщений: 297
02.06.2011, 14:30  [ТС] #5
Спасибо
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
02.06.2011, 14:32 #6
Цитата Сообщение от pito211 Посмотреть сообщение
массив - если число элементов заранее известно. vector - соответсвенно, если не известно
Интересненько.

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

Добавлено через 6 минут
Я имею ввиду не резервирование памяти вектором на внутреннем уровне после окончании лимита, а про резервировании программистом, столько памяти, сколько действительно нужно.
0
AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
02.06.2011, 15:50 #14
вектор и лист - вроде как для разного надо юзать - это не взаимозаменяемые контейнеры
0
pito211
186 / 173 / 18
Регистрация: 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 это частный случай, когда известно на какие примерно объёмы расчитан вектор. А в общем случае, если размер вектора не известен примерно и он в результате окажется огромным, то...
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
02.06.2011, 16:03 #16
а reserve это частный случай, когда известно на какие примерно объёмы расчитан вектор. А в общем случае, если размер вектора не известен примерно и он в результате окажется огромным, то...
Я говорил именно про reserve. Про остальные случаи я согласен.
C++
1
вектор и лист - вроде как для разного надо юзать - это не взаимозаменяемые контейнеры
Все, что можно сделать с помощью list, можно сделать и с помощью vector (обратное не верно, по крайней мере стандартными средствами).
Только цена вопроса в производительности.
0
AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
02.06.2011, 16:33 #17
следуя логике, делаем вывод что вектор более универсален, а следовательно более медлен в конкретном частном случае
0
02.06.2011, 16:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 16:33
Привет! Вот еще темы с решениями:

Векторы
Изучаю сейчас библиотеку vector. #include <vector> int main() { ...

Векторы
Имеется структура "Магазины", где в качестве полей есть: Название, Город,...

Векторы
Создаю вектор vector<vector<Point>> contours; После чего мне нужно создать...

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

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