singlepost

итераторы с++ << На главную или назад  

в чем ошибка… компилится нормально, а при запуске падает.

#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;
}

6 ответов в теме “итераторы с++”

  1. 5
    Алексей Боголюбский ответил:

    it++
    вы не можете этого делать, нельзя ссылаться на несуществующий элемент – ругается не на вставку элемента.

  2. 4
    Кирилл Быков ответил:

    Да ладно, идея итераторов уже давно не нова!

  3. 3
    Алексей Злобин ответил:

    STL такая штука, что не курнув – не разобраться (:

  4. 2
    Сергей Яшунин ответил:

    После it++, it невалидный, т. к. в контейнере нет элементов. Соотвественно вставка элементов по невалидному итератору кораптит память. А во-вторых, после вставки новых элементов в контейнер итераторы могут оказаться недействительными из-за возможности перераспределения памяти.

  5. 1
    Кирилл Быков ответил:

    Кури мануалы по итераторам и векторам. Или просто убери строчку с комментарием совсем.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.