будет ли stl deque перераспределять мои элементы (c++)?


Привет мне нужен контейнер stl, который может быть проиндексирован как вектор, но не перемещает старые элементы в памяти, как вектор сделал бы с resize или reserve (если только я не вызову reserve один раз в начале с емкостью, достаточной для всех элементов, что не очень хорошо для меня). (Обратите внимание, что я делаю адрес привязки к элементам, поэтому я ожидаю, что адрес этих элементов никогда не изменится). Итак, я нашел этого дека. Как вы думаете, это хорошо для этой цели? Важно: мне нужен только откат, но мне нужно расти контейнер по требованию в небольших кусках.

2 6

2 ответа:

std::deque "никогда не делает недействительными указатели или ссылки на остальные элементы" при добавлении или удалении элементов в его задней или передней части, так что да, когда вы только push_back элементы остаются на месте.

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

Способ его построения не совсем похож на связанный список, где каждый элемент выделяется отдельно, но как набор связанных массивов, предположительно, из соображений производительности. Изменение порядка элементов в середине потребует перемещения данных вокруг.