Я читаю на языке программирования C ++: Special Edition
Don't use iterators into a resized vector
Рассмотрим этот пример.
vector< int >::iterator it = foo.begin();
while ( it != foo.end() ) {
if ( // something ) {
foo.push_back( // some num );
}
++it;
}
Есть ли проблема с этим? После изменения размера вектора foo.end () в условии цикла будет перемещен вперед на 1?
P.S. Кроме того, что делать, если вектор зарезервировал место для числа х целых. Если push_back не нарушает это пространство, это все равно будет проблемой (я бы предположил, что если it.end () будет указывать на один последний элемент в векторе, который содержит что-то).