今天写插入元素算法时遇到的问题,出错部分代码如下:
vector<int>::iterator it = intV.end()-1;//it指向当前最后一个元素
cout << "&it = "<<&it << endl;//取it的地址
cout << "*it = " << *it << endl;
intV.resize(intV.size() + 1);//数组长度加一,此操作使得原本的end()后移了一个位置
cout << "&it = " << &it << endl;//resize后取it的地址
cout << "*it = " << *it << endl;
运行出错,结果如图:
发现再resize后再对it解引用时,报空指针错误。
debug后发现,
resize()前:
resize()后:
发现在resize后迭代器所指的空间被销毁,而it依旧指向这块空间,因此it就成为野指针了,也就是迭代器失效。查阅后得知使得容器容量改变的就会使得迭代器失效。
关于迭代器失效的更多知识,参考:
C++中vector迭代器失效问题及其解决方法
C++ STL — vector之迭代器失效