Имеет ли смысл...?
От: Аноним  
Дата: 22.02.05 12:36
Оценка:
Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?

Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.
Re: Имеет ли смысл...?
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.02.05 12:43
Оценка: 1 (1)
Здравствуйте, <Аноним>, Вы писали:

А>Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?


А>Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.


Это смотря чего с ним потом делать. Если просто в конец элементы добавлять — то сойдет и вектор (главное ему reserve() сделать). А если будут частые вставки/удаления в начало или середину, то лучше list, но там оверхед по памяти чуть больше — он двусвязный, поэтому надо по два указателя вместе с данными хранить.
HgLab: Mercurial Server and Repository Management for Windows
Re: Имеет ли смысл...?
От: Аноним  
Дата: 22.02.05 12:49
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?


А>Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.


Вектор дает прямой доступ к элеменам по индексу.
Соответственно сложность операции o(1)

Список дает последовательный доступ к элементам.
Сложность доступа o(N)

Так же различаются сложности операции вставки и удаления.
Что лучше зависит исключительно от задачи.
stl контейнеры — это всего лишь кирпичики.
Re[2]: Имеет ли смысл...?
От: Кодт Россия  
Дата: 22.02.05 12:49
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Это смотря чего с ним потом делать. Если просто в конец элементы добавлять — то сойдет и вектор (главное ему reserve() сделать). А если будут частые вставки/удаления в начало или середину, то лучше list, но там оверхед по памяти чуть больше — он двусвязный, поэтому надо по два указателя вместе с данными хранить.


А если частые вставки в голову/хвост — то дек (std::deque). Он, собственно, для этого и заточен.
Перекуём баги на фичи!
Re[2]: Имеет ли смысл...?
От: Lapulya  
Дата: 22.02.05 15:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:



А>>Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?


А>>Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.


А>Вектор дает прямой доступ к элеменам по индексу.

А>Соответственно сложность операции o(1)

А>Список дает последовательный доступ к элементам.

А>Сложность доступа o(N)

А>Так же различаются сложности операции вставки и удаления.

А>Что лучше зависит исключительно от задачи.
А>stl контейнеры — это всего лишь кирпичики.

Только не o(1),а O(1), ну и соответственно не o(N), а O(N)
Re: Имеет ли смысл...?
От: Alexeib Япония  
Дата: 23.02.05 02:38
Оценка:
Здравствуйте, Аноним, Вы писали:


Вектор обеспечивает непрерывное в памяти хранение элементов
Re[3]: Имеет ли смысл...?
От: PM  
Дата: 24.02.05 10:07
Оценка:
Здравствуйте, Кодт, Вы писали:
хъ

> А если частые вставки в голову/хвост — то дек (std::deque). Он,

> собственно, для этого и заточен.
Есть такое мнение, что вектор следует использовать когда необходимо
непрерывное размещение элементов, а так вообще предпочтительнее дек (из-за
отсутствия перераспределений памяти). В большинстве случаев я использую
дек, но остается какое-то смутное сомнение, что использование вектора более
уместно с точки зрения семантики.
--
foobar2000 v0.8.3: 02. Pink — Don't Let Me Get Me [Missundaztood]
Re[4]: Имеет ли смысл...?
От: Аноним  
Дата: 24.02.05 10:32
Оценка:
Здравствуйте, PM, Вы писали:

PM>Здравствуйте, Кодт, Вы писали:

PM>хъ

>> А если частые вставки в голову/хвост — то дек (std::deque). Он,

>> собственно, для этого и заточен.
PM>Есть такое мнение, что вектор следует использовать когда необходимо
PM>непрерывное размещение элементов, а так вообще предпочтительнее дек (из-за
PM>отсутствия перераспределений памяти). В большинстве случаев я использую
PM>дек, но остается какое-то смутное сомнение, что использование вектора более
PM>уместно с точки зрения семантики.

Без описания задачи такое сравнение лишено смысла.
Скажем для вычислительных задач, где требуется ображение к элементу
по индексу нужен вектор.
А вот для моделирования очереди сообщений нужен дек.
Просто не существует такой структуры данных,
которая бы подходила для всех задач.
Re[5]: Имеет ли смысл...?
От: PM  
Дата: 24.02.05 12:03
Оценка:
Здравствуйте, , Вы писали:

> PM>Есть такое мнение, что вектор следует использовать когда необходимо

> PM>непрерывное размещение элементов, а так вообще предпочтительнее дек
> PM>(из-за отсутствия перераспределений памяти). В большинстве случаев я использую
> PM>дек, но остается какое-то смутное сомнение, что использование вектора
> PM>более уместно с точки зрения семантики.

> Без описания задачи такое сравнение лишено смысла.

> Скажем для вычислительных задач, где требуется ображение к элементу по индексу нужен вектор.
Есть deque::operator[] Вдобавок, существует потенциальная проблема с vector<bool>
> А вот для моделирования очереди сообщений нужен дек.
А почему не list? Я думаю, слово "нужен" чересчур категорично, "вполне подходит" более подходит
> Просто не существует такой структуры данных, которая бы подходила для всех задач.
Согласен , поэтому в STL мы имеем несколько видов контейнеров
Однако речь идет о векторе, как о последовательности с произвольным доступом и его единственном преимуществе перед deque
— непрерывном хранении данных.

--
foobar2000 v0.8.3: Wysiwig — Shake baby shake [Chumbawamba]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.