Здравствуйте, <Аноним>, Вы писали:
А>Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?
А>Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.
Это смотря чего с ним потом делать. Если просто в конец элементы добавлять — то сойдет и вектор (главное ему reserve() сделать). А если будут частые вставки/удаления в начало или середину, то лучше list, но там оверхед по памяти чуть больше — он двусвязный, поэтому надо по два указателя вместе с данными хранить.
HgLab: Mercurial Server and Repository Management for Windows
Имеет ли смысл...?
От:
Аноним
Дата:
22.02.05 12:36
Оценка:
Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?
Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.
Re: Имеет ли смысл...?
От:
Аноним
Дата:
22.02.05 12:49
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?
А>Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.
Вектор дает прямой доступ к элеменам по индексу.
Соответственно сложность операции o(1)
Список дает последовательный доступ к элементам.
Сложность доступа o(N)
Так же различаются сложности операции вставки и удаления.
Что лучше зависит исключительно от задачи.
stl контейнеры — это всего лишь кирпичики.
Здравствуйте, Нахлобуч, Вы писали:
Н>Это смотря чего с ним потом делать. Если просто в конец элементы добавлять — то сойдет и вектор (главное ему reserve() сделать). А если будут частые вставки/удаления в начало или середину, то лучше list, но там оверхед по памяти чуть больше — он двусвязный, поэтому надо по два указателя вместе с данными хранить.
А если частые вставки в голову/хвост — то дек (std::deque). Он, собственно, для этого и заточен.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Заслуживает ли внимание следующая вещь: если в vector инициализируется НЕ как массив определенной длины, а как динамический массив, то использовать list?
А>>Это я просто с STL разбираюсь, точнее пишу свой, в самообразовательных целях и вот роль вектора (когда он динамический) мне не до конца ясна.
А>Вектор дает прямой доступ к элеменам по индексу. А>Соответственно сложность операции o(1)
А>Список дает последовательный доступ к элементам. А>Сложность доступа o(N)
А>Так же различаются сложности операции вставки и удаления. А>Что лучше зависит исключительно от задачи. А>stl контейнеры — это всего лишь кирпичики.
Только не o(1),а O(1), ну и соответственно не o(N), а O(N)
Здравствуйте, Кодт, Вы писали:
хъ
> А если частые вставки в голову/хвост — то дек (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>уместно с точки зрения семантики.
Без описания задачи такое сравнение лишено смысла.
Скажем для вычислительных задач, где требуется ображение к элементу
по индексу нужен вектор.
А вот для моделирования очереди сообщений нужен дек.
Просто не существует такой структуры данных,
которая бы подходила для всех задач.
Здравствуйте, , Вы писали:
> PM>Есть такое мнение, что вектор следует использовать когда необходимо > PM>непрерывное размещение элементов, а так вообще предпочтительнее дек > PM>(из-за отсутствия перераспределений памяти). В большинстве случаев я использую > PM>дек, но остается какое-то смутное сомнение, что использование вектора > PM>более уместно с точки зрения семантики.
> Без описания задачи такое сравнение лишено смысла. > Скажем для вычислительных задач, где требуется ображение к элементу по индексу нужен вектор.
Есть deque::operator[] Вдобавок, существует потенциальная проблема с vector<bool> > А вот для моделирования очереди сообщений нужен дек.
А почему не list? Я думаю, слово "нужен" чересчур категорично, "вполне подходит" более подходит > Просто не существует такой структуры данных, которая бы подходила для всех задач.
Согласен , поэтому в STL мы имеем несколько видов контейнеров
Однако речь идет о векторе, как о последовательности с произвольным доступом и его единственном преимуществе перед deque
— непрерывном хранении данных.