Выбор ответа Middle Контейнеры STL изнутри обновлено

deque: что инвалидирует push_back

Вопрос

Что гарантирует std::deque при push_back?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Ссылки на элементы остаются валидными, итераторы инвалидируются. Элементы deque лежат в блоках, которые не перемещаются.

Варианты ответа

  1. Всё остаётся валидным: и итераторы, и ссылки на элементы
  2. Ссылки на элементы остаются валидными, итераторы инвалидируютсяправильный ответ
  3. Всё инвалидируется, как у vector при реаллокации буфера
  4. Валидны итераторы, но не ссылки: элементы переезжают в новый блок

Разбор

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

  • Итераторы после вставки в концы использовать нельзя.
  • В отличие от vector, элементы не переезжают.
  • Последний вариант перевёрнут.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.