zoukankan      html  css  js  c++  java
  • 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;
    

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

  • 相关阅读:
    centos 6 关闭防火墙
    linux 卸载openJDK
    elasticsearch-head 配置
    elasticsearch6.5.x-centos6
    gitbook 安装和使用
    ubuntu 开启关闭mysql服务
    spring boot 项目使用idea正常打包后执行总是出现异常,解决办法
    idea导入配置SSM项目,并进行打包
    正则表达式规则
    Debug --> 对于pcap包中的某一packet的小分析
  • 原文地址:https://www.cnblogs.com/likemao/p/8664670.html
Copyright © 2011-2022 走看看