実戦c++のvectorシリーズ--恐ろしい反復器の失効の2(vectorの要素を削除)

1406 ワード

前のブログ「実戦c++のvectorシリーズ–恐ろしい反復器失効(vector再申請メモリ)」の基礎があれば、ここの内容は簡単に見えます.
直接コード:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    std::vector<int>::iterator iter1 = v.begin() + 2;
    v.erase(v.begin() + 1);
    int n = *iter1;

    return 0;
}

erase後、反復器は失効しました.
vector反復器のいくつかの失効状況:1.1つの要素を挿入(push_back)すると、end操作で返される反復器は必ず無効になります.2.1つの要素を挿入(push_back)すると、capacity戻り値は要素を挿入しない前に比べて変更され、コンテナ全体を再ロードする必要があります.firstとend操作で返される反復器は無効になります.3.削除操作(erase,pop_back)を行うと、削除点を指す反復器はすべて無効になり、削除点の後ろの要素を指す反復器もすべて無効になります.