C++日记_17.6.11 迭代器报“vector iterators incompatible”错的一种情况

在C++编程中,遇到迭代器错误'vector iterators incompatible',通常是由于在erase操作后未更新迭代器导致。解决方案是在erase后使用'i = vector.erase(i)',因为erase会返回被删除元素的后继元素或end().

C++项目催人老,尤其还是自己一个人要干一个组的活的时候...不过也确实通过这种方式磨练了自己,这不今个就遇到个奇葩问题。

迭代器报错:“vector iterators incompatible”。

这啥?我蜜汁自信,感觉并没有产生不搭的问题啊!完全摸不到头脑,遂谷之。

当时的代码片段如下:

	auto prop_itr = RoleCardController::getInstance()->propVec.begin();
	while (prop_itr != RoleCardController::getInstance()->propVec.end())
	{
		if ((*prop_itr)->state == PROPS_FREE)
		{
			(*prop_itr)->purge();
			prop_itr = RoleCardController::getInstance()->propVec.erase(prop_itr);
			continue;
			//这个free掉,后面继续
		}

	.......

最后查到解决办法:


在erase操作后,没有将循环变量i指向修改后的向量迭代器,就继续循环,再与end()比较时断言出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值