在vector中,我们经常会使用迭代器iterator对vector中的元素进行索引,也经常需要将迭代器作为参数传递到vector的成员函数中,迭代器使用非常方便,但使用不当也会给我们带来巨大的麻烦,下面就深入分析vector迭代器失效的场景
push_back导致迭代器失效
Release模式下能正常运行,是因为 迭代器 it指向的内存虽然被释放了,但是it保存的内存地址依然是有效的, 这时候如果没有往这个地址对应的内存进行写操作的话,得到的结果自然是正确的,而C++并不会对这种情况做判断Debug模式下,会抛异常,是由于VC实现的stl中,对debug模式下的迭代器操作做了更为严格的处理,扩容时将迭代器赋值为了nullptr,自然会抛异常。稍后将会详细讲解
int main()
{vector<int> ta;ta.push_back(1);ta.push_back(2);vector<int>::iterator it = ta.begin();cout << "it的值是 " << *it << endl;cout << "容量是 " << ta.capacity() << endl;ta.push_back(3);ta.push_back(5); cout << "push_back后容量是 " << ta.capacity() << endl;
cout