Deque стереть с середины, указатель потерян? - PullRequest
0 голосов
/ 30 декабря 2011

Я часто стираю элементы из середины моего deque.адрес памяти элементов в deque используется в некоторых других местах.стирает ли средний элемент из deque все указатели на deque, как это происходит с векторами?я должен переключиться на список? (в любом случае я повторяю всю deque)

Я пытался прочитать реализацию deque, но это сложно, я не понимаю, действует ли он как список или вектор.

Я использую VisualC ++ STD реализацию deque.

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Да.Вставка в середине делает недействительными все итераторы и ссылки на элементы (и, следовательно, указатели на элементы).Вставка на любом конце делает недействительными все итераторы, но не ссылки или указатели.И вы не читаете реализацию, чтобы узнать такие вещи;Вы читаете документацию.(Реализация может фактически разрешать операции, которые официально не поддерживаются. До следующего исправления ошибки.)

2 голосов
/ 30 декабря 2011

стирает ли средний элемент из deque недействительные все указатели на deque, как это происходит с векторами?

В случае deque все итераторы и ссылки на deque становятся недействительными, если не стертыэлементы находятся в конце (спереди или сзади) deque.

Для вектора все итераторы и ссылки до точки вставки не затрагиваются, если только новый размер контейнера не превышает предыдущую емкость.

...