Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
-21 / 5 / 3
Регистрация: 14.03.2013
Сообщений: 130
1

Разница между list и vector?

25.05.2013, 17:45. Показов 6581. Ответов 12
Метки нет (Все метки)

Разница между list и vector?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2013, 17:45
Ответы с готовыми решениями:

Разница между list и vector
Подскажите пожалуйста в чем различие между листами и векторами? Сколько не пытался не смог найти...

Разница между Vector и ArrayList
Какая разница между Vector и ArrayList? Как правелнее объявлять переменую типа ArrayList? 1)...

Разница между list и dic
Начал изучать Python, и возник такой вопрос: а какая разница между списками и словарями?

В чем разница между массивом строк и List<string>?
А есть ли принципиальная разница между string array1 и List&lt;string&gt; array2 ? И если есть, то в...

12
Don't worry, be happy
17143 / 10026 / 1933
Регистрация: 27.09.2012
Сообщений: 24,956
Записей в блоге: 1
25.05.2013, 17:46 2
list - это двусвязный список.
vector - это своего рода динамической массив
0
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
25.05.2013, 17:48 3
У list нету перегруженного operator[]
0
Don't worry, be happy
17143 / 10026 / 1933
Регистрация: 27.09.2012
Сообщений: 24,956
Записей в блоге: 1
25.05.2013, 17:53 4
Что касается реализации, то они так же предоставляют разные типы итераторов.
У листа нет capacity ну и сопутствующего функционала.

Добавлено через 2 минуты
Зато есть push_front, pop_front
0
Ушел с форума
Эксперт С++
16425 / 7399 / 1186
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
25.05.2013, 18:02 5
Если по-простому:

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

vector - динамический массив.
Реализован как непрерывная последовательность элементов.
Произвольный доступ к элементам осуществляется за постоянное время, но
вставка и удаление ведет к накладным расходам, так как приходится
выполнять сдвиг части массива, а еще выполнять перераспределение памяти.
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
25.05.2013, 19:47 6
Цитата Сообщение от Убежденный Посмотреть сообщение
но
вставка и удаление ведет к накладным расходам, так как приходится
выполнять сдвиг части массива, а еще выполнять перераспределение памяти.
а если добавлять в конец вектора?
0
Ушел с форума
Эксперт С++
16425 / 7399 / 1186
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
25.05.2013, 19:51 7
От перераспределения памяти это все равно не спасает, если только при
создании вектора не зарезервировать достаточно памяти.
0
3246 / 2048 / 351
Регистрация: 24.11.2012
Сообщений: 4,902
25.05.2013, 19:52 8
Цитата Сообщение от mat_for_c Посмотреть сообщение
а если добавлять в конец вектора?
Если size < capacity, то просто копируется один объект. Иначе - выделение нового участка памяти, копирование в него существующих объектов вместе с новым, освобождение старой памяти...
0
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
25.05.2013, 20:00 9
Цитата Сообщение от 0x10 Посмотреть сообщение
Если size < capacity, то просто копируется один объект. Иначе - выделение нового участка памяти, копирование в него существующих объектов вместе с новым, освобождение старой памяти...
Причем выделяется не столько же памяти, а с запасом. Например, size = 32, capacity = 32, в конец вставляется новый элемент. Так как size = capacity, то нужно выделять память в новом участке. Если коэффициент = 2, то выделится память под 64 элемента. Потом со старого участка элементы копируются (или же переносятся (move), если у типа элементов предусмотрена такая возможность).
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
25.05.2013, 20:19 10
Цитата Сообщение от Убежденный Посмотреть сообщение
От перераспределения памяти это все равно не спасает, если только при
создании вектора не зарезервировать достаточно памяти
т.е. с преаллокацией должно пошустрее работать, чем постоянно push_back() вызывать?
0
What a waste!
1597 / 1293 / 176
Регистрация: 21.04.2012
Сообщений: 2,709
25.05.2013, 20:27 11
mat_for_c, можно "преаллоцировать" (reserve) и push_back вызывать, и не будет перераспределения памяти, пока за capacity не вылезете.
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.05.2013, 09:38 12
Цитата Сообщение от Убежденный Посмотреть сообщение
На базе связных списков выгодно строить такие структуры данных, как стеки и очереди.
Насколько мне известно, std::stack строится на базе std::deque, который в свою очередь обычно реализуется через вектор векторов. Поправьте, если не так.
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.05.2013, 09:55 13
Цитата Сообщение от Tulosba Посмотреть сообщение
Насколько мне известно, std::stack строится на базе std::deque, который в свою очередь обычно реализуется через вектор векторов. Поправьте, если не так.
а с чего ты взял что речь об std::stack ? тут и у ТС не указано что за лист и что за вектор.
так что одна фигня
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2013, 09:55

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Получение данных из БД: в чем разница между Iqueryable и List
получение записей из бд можно с помощью IQueryable и List. А в чем разница? Что лучше использовать?

vector и list
1) Правильно ли я понимаю, что при расширении вектора все предыдущие указатели портятся? ...

Vector, list for beginners
Доброго времени суток. Поскольку самоучитель Лафоре не подходит для начинающих (...

Контейнеры Vector и List (C++)
Уважаемые форумчане! Помогите, пожалуйста, реализовать вручную классы Vector и List с основными их...

STL vector,list
У меня 2 вопроса: 1) можете рассказать,как подробно работает reverse_iterator?Создал вектор,хочу...

Шаблоны, vector, list
Создать класс Beta таким образом , чтобы при уничтожении последнего объекта на экран выдавалось...


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

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

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