容器遍历删除特定条件元素应注意迭代器的增加方式

1.首先要确定该容器删除操作后返回的迭代器指向哪个元素

2.是否返回迭代器


在vector容器中

c.erase(p)

Removes element referred to by the iterator p.

删除迭代器 p 所指向的元素

Returns an iterator referring to the element after the one deleted, or an off-the-end iterator if p referred to the last element. Undefined if p is an off-the-end iterator.

返回一个迭代器,它指向被删除元素后面的元素。如果 p 指向容器内的最后一个元素,则返回的迭代器指向容器的超出末端的下一位置。如果 p 本身就是指向超出末端的下一位置的迭代器,则该函数未定义

c.erase(b,e)

Removes the range of elements denoted by the iterators b and e.

删除迭代器 be 所标记的范围内所有的元素

Returns an iterator referring after the last one in the range that was deleted, or an off-the-end iterator if e is itself an off-the-end iterator.

返回一个迭代器,它指向被删除元素段后面的元素。如果 e 本身就是指向超出末端的下一位置的迭代器,则返回的迭代器也指向容器的超出末端的下一位置


所以在循环中,如果删除了元素,就无需添加自增,如果没有,就要++

	std::vector<Vec3f>::iterator itc = circles.begin();
	while(itc != circles.end())
	{
		//std::cout<<".";
		if(OverLine(*itc,image.size().width,image.size().height,10)){
			itc=circles.erase(itc);
		}else{
			itc++;
		}
	}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值