ERROR: iterator not incrementable || iterator not decrementable

这个错误提示:迭代器不可以增加

exmaple:

vector<int> tVecInt;
	vector<int>::reverse_iterator iterInt = tVecInt.rbegin();
	cout << *iterInt << endl;
	system("pause");
	return 0;

 运行结果:

这个很明显是由于迭代器越界访问导致崩溃的;

一个比较不易看出的例子:

vector<int> tVecInt = {1,2,3,4,5};
	vector<int>::iterator iterInt = tVecInt.begin();
	for (; iterInt < tVecInt.end(); ++iterInt) {
		if ((*iterInt) == 3)
			tVecInt.erase(iterInt);
		cout << *iterInt << endl;
	}
	system("pause");
	return 0;

 运行结果:

 

        原因:当一个容器执行了一次earse操作之后,原来用来遍历的iterator就失效了,其行为是不可预测的,具体情况由实现决定。同时earse操作会返回一个指向container下一个元素的iterator,如果想继续遍历,就得用返回的iterator继续操作。

更好的代码写法(参考C++ Primer第五版 312页)

vector<int> tVecInt = {1,2,3,4,5};
	vector<int>::iterator iterInt = tVecInt.begin();
	while (iterInt!=tVecInt.end())
	{
		if ((*iterInt) == 3)
			iterInt = tVecInt.erase(iterInt);
		else
			++iterInt;
	}
	system("pause");
	return 0;

       如此,那个错误就不再出现了。很多代码写法是有理由的,好的代码可以更简洁,清晰易懂,出错可能性更低,更易维护

 

posted on 2018-03-28 16:35 maolike 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/likemao/p/8664670.html

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值