Выбор ответа Middle Контейнеры STL изнутри обновлено
deque: что инвалидирует push_back
Вопрос
Что гарантирует std::deque при push_back?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ссылки на элементы остаются валидными, итераторы инвалидируются. Элементы deque лежат в блоках, которые не перемещаются.
Варианты ответа
- Всё остаётся валидным: и итераторы, и ссылки на элементы
- Ссылки на элементы остаются валидными, итераторы инвалидируютсяправильный ответ
- Всё инвалидируется, как у
vectorпри реаллокации буфера - Валидны итераторы, но не ссылки: элементы переезжают в новый блок
Разбор
Элементы deque лежат в блоках, которые не перемещаются. При вставке в конец может перевыделиться массив указателей на блоки (map), из-за чего итераторы (которые знают про него) становятся недействительными, а сами элементы на месте.
- Итераторы после вставки в концы использовать нельзя.
- В отличие от vector, элементы не переезжают.
- Последний вариант перевёрнут.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.