list iterator not decrementable

刚遇到这个“list iterator not decrementable”的问题,网上多数解决方案是这样的:

意思就是在#include "stdafx.h"的下一行加上#define _HAS_ITERATOR_DEBUGGING 0 

这样虽然能解决部分问题,但其实出现这个错误的根源在我们的代码之中,如这位仁兄所回答的一样:

意思就是,错误的根源在我们的代码中,因为C++标准里不允许迭代器超出任何容器允许的范围,所以会出错。

以我自己的代码为例,我的代码中使用到了reverse_iterator,原代码如下:

TransVector tempVet;

		list<TransVector>::reverse_iterator ity = vectors.rbegin();

		++ity;

		for (list<TransVector>::reverse_iterator itx = vectors.rbegin();itx != vectors.rend(); ++itx, ++ity)
		{
			if (ity != vectors.rend() && IsBetterThan(*itx,*ity,preVet))
			{
				tempVet = *itx;
				*itx = *ity;
				*ity = tempVet;
			}
		}

原意是,迭代器ity在迭代器itx之前,因为是reverse_iterator,这样由后往前比较list中的元素,完成后最好的元素在list头部。

但这段代码报了“list reverse_iterator”的错误,按照上面的解释“C++标准里不允许迭代器超出任何容器允许的范围”,我检查了

代码,发现在itx 到了list的rend()时,ity已经超出rend()的范围了,因此如下修改了代码,错误就消失了。所以建议大家出现这

个错误先查看自己的代码逻辑。

TransVector tempVet;

		list<TransVector>::reverse_iterator ity = vectors.rbegin();

		++ity;

		for (list<TransVector>::reverse_iterator itx = vectors.rbegin(); ity != vectors.rend() && itx != vectors.rend(); ++itx, ++ity)
		{
			if (IsBetterThan(*itx,*ity,preVet))
			{
				tempVet = *itx;
				*itx = *ity;
				*ity = tempVet;
			}
		}


 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值