powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чем по большому счёту отличается std::deque и std::vector?
13 сообщений из 13, страница 1 из 1
Чем по большому счёту отличается std::deque и std::vector?
    #38404509
Confused++
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всегда думал, что std::deque - это подобие std::stack, только FIFO ...
сегодня узнал, что std::deque - практически то же самое, что и std::vector, только не понятно чем от него отличается
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38404525
Да, очередь queue в общем случае это кольцевой буфер, с динамически изменяемым размером, т.е. хорошо ложиться на std::vector.
А для оптимального пере-выделения памяти может использоваться нечто вроде std::list< std::vector<int> >.
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38404617
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Confused++Всегда думал, что std::deque - это подобие std::stack, только FIFO ...
сегодня узнал, что std::deque - практически то же самое, что и std::vector, только не понятно чем от него отличается

Отличаются стоимостью вставки и удаления элементов в произольном месте (не в конце).
vector - O(N) , где N - число элементов, хранящихся в векторе.

deque - O(1)

И накладными расходами памяти на хранение элементов.

vector - 0

deque - >0
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38404640
MasterZivConfused++Всегда думал, что std::deque - это подобие std::stack, только FIFO ...
сегодня узнал, что std::deque - практически то же самое, что и std::vector, только не понятно чем от него отличается

Отличаются стоимостью вставки и удаления элементов в произольном месте (не в конце).
vector - O(N) , где N - число элементов, хранящихся в векторе.

deque - O(1)

И накладными расходами памяти на хранение элементов.

vector - 0

deque - >0

А вы list с deque не путаете?

Учитывая, что deque - это либо список массивов, либо массив массивов :)
http://alenacpp.blogspot.ru/2006/12/vector-vs-deque.html

Отличаются стоимостью вставки и удаления элементов в произольном месте (не в конце).
vector - O(N) , где N - число элементов, хранящихся в векторе.

deque - O(1 - N)
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38404709
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
list с deque не путаете?,

Я может быть немного загрубил оценки, но вот первоисточник

http://www.cplusplus.com/reference/deque/deque/erase/

Complexity
Linear on the number of elements erased (destructions). Plus, depending on the particular library implemention, up to an additional linear time on the number of elements between position and one of the ends of the deque.

http://www.cplusplus.com/reference/deque/deque/insert/

Complexity
Linear on the number of elements inserted (copy/move construction). Plus, depending on the particular library implemention, up to an additional linear in the number of elements between position and one of the ends of the deque.
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38404757
O(M + N)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivlist с deque не путаете?,

Я может быть немного загрубил оценки, но вот первоисточник

http://www.cplusplus.com/reference/deque/deque/erase/

Complexity
Linear on the number of elements erased (destructions). Plus, depending on the particular library implemention, up to an additional linear time on the number of elements between position and one of the ends of the deque.

http://www.cplusplus.com/reference/deque/deque/insert/

Complexity
Linear on the number of elements inserted (copy/move construction). Plus, depending on the particular library implemention, up to an additional linear in the number of elements between position and one of the ends of the deque.
Ну тут написано, что erase и insert имеют сложность O(M + N), где M - количество удаляемых/вставляемых элементов, а N - количество элементов от одного из концов очереди.

Здесь внутренним массивом в std::list/vector< std::vector/array<K, int> > пренебрегают, т.к. K - обычно либо константа, либо не более некоторого небольшого значения. Однако в общем случае я не вижу ограничений в использовании std::vector<int> для std::deque<int>, со сложностью удаления/вставки O(N).
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38404813
O(M + N)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
использовании std::vector<int> для std::deque<int>, со сложностью удаления/вставки O(N), где N - количество элементов в deque (т.е. в vector).
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38405280
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Confused++Всегда думал, что std::deque - это подобие std::stack, только FIFO ...
сегодня узнал, что std::deque - практически то же самое, что и std::vector, только не понятно чем от него отличается
Основных отличия два:
1) Совместимость внутреннего представления с простым массивом: вектор совместим, дека - нет);
2) Стоимость вставки в начало: вектор - O(N), дека - O(1).
Про накладные расходы MasterZiv уже писал, добавлю только, что с ростом размера контейнера
их относительная часть становится совсем мизерной.
Саттер еще где-то об этом писал вместе с Майерсом и Александреску.
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38405701
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё раз про O(1).

deque устроен как список страниц, каждая из которых представляет собой, грубо говоря, вектор с фиксированным размером.
Плюс возможно некий индекс сверху.
Вставка -- это поиск страницы и вставка на страницу со сдвигом фиксированного числа элементов (размер страницы / размер элемента). Если не хватает места на странице, в список вставляется новая пустая страница.
Удаление -- соответственно обратный процесс.

В стандарте прописана возможность для реализации увеличить стоимость до N/2, но в реальности я думаю это никогда не происходит.
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38446436
MasterZivВ стандарте прописана возможность для реализации увеличить стоимость до N/2, но в реальности я думаю это никогда не происходит.
А это именно в стандарте написано или на http://www.cplusplus.com , если в стандарте, то можно цитату?

2003 cpp_standard.pdf
Draft_2011-02-28_N3242
Draft_2012-11-02_N3485
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38446531
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
именно в стандартеА это именно в стандарте написано или на http://www.cplusplus.com , если в стандарте, то можно цитату?



Так там из стандарта определения и идут.

Мне лично лень искать в стандарте это...

Тебе очень надо именно из стандарта, общего понимания не достаточно ?
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38446544
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
MasterZivещё раз про O(1).

deque устроен как список страниц, каждая из которых представляет собой, грубо говоря, вектор с фиксированным размером.
Плюс возможно некий индекс сверху.
Вставка -- это поиск страницы и вставка на страницу со сдвигом фиксированного числа элементов (размер страницы / размер элемента). Если не хватает места на странице, в список вставляется новая пустая страница.
Удаление -- соответственно обратный процесс.

В стандарте прописана возможность для реализации увеличить стоимость до N/2, но в реальности я думаю это никогда не происходит.Не, все страницы кроме первой и последней должны быть одинакового размера и полностью заполнены. Так что чтобы вставить/удалить надо сдвигать либо все элементы до конца, либо все элементы до начала.
...
Рейтинг: 0 / 0
Чем по большому счёту отличается std::deque и std::vector?
    #38446552
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако, нашёл довольно быстро...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
23.3.3 Class template
deque
[deque]
23.3.3.1 Class template
deque
overview [deque.overview]
1
A
deque
is a sequence container that, like a
vector
(
23.3.6
), supports random access iterators. In addition,
it supports constant time insert and erase operations at the beginning or the end; insert and erase in the
middle take linear time. That is, a deque is especially optimized for pushing and popping elements at the
beginning and end. As with vectors, storage management is handled automatically.

...

23.3.3.4 deque modifiers [deque.modifiers]

iterator insert(const_iterator position, const T& x);
...
void push_front(const T& x);
void push_front(T&& x);
void push_back(const T& x);
void push_back(T&& x);
...
3
Complexity:
The complexity is linear in the number of elements inserted plus the lesser of the distances
to the beginning and end of the deque. Inserting a single element either at the beginning or end of a
deque always takes constant time and causes a single call to a constructor of
T.

iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);
...
Complexity:
The number of calls to the destructor is the same as the number of elements erased, but
the number of calls to the assignment operator is no more than the lesser of the number of elements
before the erased elements and the number of elements after the erased elements.

...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чем по большому счёту отличается std::deque и std::vector?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]