C++ STL迭代器失效

今天写插入元素算法时遇到的问题,出错部分代码如下:

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之迭代器失效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值