Назад к вопросамЧто произойдёт, когда программа прочитает
JuniorТеорияОчень часто
Что произойдёт, когда программа прочитает *it после push_back?
#include <iostream>
#include <vector>
int main() {
std::vector<int> v{1, 2, 3};
auto it = v.begin();
v.push_back(4);
std::cout << *it << '\n';
}Неопределённое поведение, если push_back перевыделил память: it недействителен
- Ждать, что старые элементы останутся на месте: без свободной ёмкости
push_backпереносит их в новый блок памяти, аitуказывает в освобождённый. - Ждать, что вектор обновит
it: итератор никто не меняет, когда элементы переезжают, и чтение*itпосле перевыделения памяти — неопределённое поведение.
- Как изменится результат, если вызвать
v.reserve(4)до того, как взятьit? - Какие ещё операции
std::vectorмогут сделать его итераторы недействительными?