Здравствуйте, realbob, Вы писали:
R>R> vector<int> v;
R> vector<int>::iterator I;
R> for(i = 0; i < 10000; i++)
R> v.push_back(1);
R> for(I = v.begin(); I < v.end(); I++)
R> //используем I.
R> for(i = 0; i < 10000; i++)
R> v.push_back(2); //Память перераспередлилась.
1. Тот I, который был в первом цикле, стал невалидным.
R> for(I = v.begin(); I < v.end(); I++)
R> //используем I. <<тут была бы ошибка. А это, согласитесь, мягко говоря не так.
2. Тут не будет ошибки. Ведь Вы же проинициализировали I заново, вызвав begin() в начале цикла!!!
R>
Что-то Вы похоже запутались в итераторах. Сначала пишете неверную конструкцию, и считаете, что она будет работать верно. Потом Вы пишете верный код и ждете ошибку...
Попробуйте для сравнения вот так —
vector<int> v;
vector<int>::iterator I;
for(i = 0; i < 10000; i++)
v.push_back(1);
for(I = v.begin(); I < v.end(); I++)
//используем I.
I = v.begin(); // <- выставляем I в начало вектора перед повторным распределением...
for(i = 0; i < 10000; i++)
v.push_back(2); //Память перераспередлилась.
for(; I < v.end(); I++) // <- начинаем цикл с текущего значения итератора...
//используем I. <<тут была бы ошибка. А это, согласитесь, мягко говоря не так.
и Вас почуствуете, что такое невалидный итератор.