в чем ошибка… компилится нормально, а при запуске падает.
#include <iostream>
#include <vector>
using namespace std;
//————————–
int main () {
vector<int> vec;
vector<int> ::iterator it = vec.begin();
it++; // здесь итератор указывает на второй элемент?
vec.push_back ( 1 );
vec.insert( it, 1, 2 );
vec.push_back ( 2 );
cout << vec[0] << " " << vec[1] << endl;
system("PAUSE");
return 0;
}
14 мая 2009 в 1:00
it++
вы не можете этого делать, нельзя ссылаться на несуществующий элемент – ругается не на вставку элемента.
13 мая 2009 в 21:02
Да ладно, идея итераторов уже давно не нова!
13 мая 2009 в 20:05
STL такая штука, что не курнув – не разобраться (:
13 мая 2009 в 12:00
После it++, it невалидный, т. к. в контейнере нет элементов. Соотвественно вставка элементов по невалидному итератору кораптит память. А во-вторых, после вставки новых элементов в контейнер итераторы могут оказаться недействительными из-за возможности перераспределения памяти.
13 мая 2009 в 6:00
Кури мануалы по итераторам и векторам. Или просто убери строчку с комментарием совсем.