Действительно ли pop_back () делает недействительными * все * итераторы в std :: vector? - PullRequest
5 голосов
/ 15 сентября 2008
std::vector<int> ints;

// ... fill ints with random values

for(std::vector<int>::iterator it = ints.begin(); it != ints.end(); )
{
    if(*it < 10)
    {
        *it = ints.back();
        ints.pop_back();
        continue;
    }
    it++;
}

Этот код не работает, потому что когда вызывается pop_back(), it становится недействительным. Но я не вижу никаких документов, говорящих о признании недействительными итераторов в std::vector::pop_back().

У вас есть ссылки по этому поводу?

Ответы [ 11 ]

0 голосов
/ 15 сентября 2008

Проверьте информацию здесь (cplusplus.com) :

Удалить последний элемент

Удаляет последний элемент в векторе, эффективно уменьшая размер вектора на единицу и аннулируя все итераторы и ссылки на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...