stl 迭代器失效

1、对于基于连续内存的容器,容器元素的增删,有可能会导致迭代器的失效。考虑:

int main(int argc, char* argv[])
{
vector<int> intVec;
intVec.push_back(1);
intVec.push_back(2);
intVec.push_back(3);

vector<int>::iterator iter1 = intVec.begin();
vector<int>::iterator iter2 = iter1+1;
vector<int>::iterator iter3 = iter1+2;
int& ri = intVec[1];

int* p1 = &(*iter2);
int* p2 = &ri;

intVec.erase(iter1);

printf("iter2[%d]
",*iter2);
printf("ri[%d]
",ri);
printf("p1[%d]
",*p1);
printf("p2[%d]
",*p2);

getchar();
}

2、通过Memory可以内存的变化,删除之前是 1 2 3 ,删除之后是2 3,删除iter1会导致迭代器iter2和ri失效。迭代器和引用,底层都是指针,删除iter1,指针的值不变,iter2和ri的取值是3。注意:Debug模式下,iter2解引用会导致 Debug Assertion Failed。
3、删除iter3,不会导致iter2和ri失效。
4、对intVec添加元素或者插入元素,导致整个内存重分配,会导致所有迭代器失效。

原文地址:https://www.cnblogs.com/nzbbody/p/4575594.html