标签:
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]\n",*iter2); printf("ri[%d]\n",ri); printf("p1[%d]\n",*p1); printf("p2[%d]\n",*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添加元素或者插入元素,导致整个内存重分配,会导致所有迭代器失效。
标签:
原文地址:http://www.cnblogs.com/nzbbody/p/4575594.html