C++标准库---移除性算法之一remove()&remove_if()

移除性算法

        本系列所有算法根据元素值或某一准则,在一个区间内移除某些元素。这些算法并不能改变元素的数量,它们只是以逻辑上的思考,将原本置于后面的“不移除元素”向前移动,覆盖那些被移除元素而已,它们都返回新区间的逻辑终点(也就是最后一个“不移除元素”的下一位置)。

移除某些特定元素

remove(beg,end,cosntt T& value)

remove_if(beg,end,op)

(1)remove()会移除区间{beg,end)中每一个“与value相等”的元素;

(2)remove_if()会移除区间[beg,end)中每一个“令以下一元判断式:op(elem)获得true”的元素;

(3)两个算法都返回变动后的序列的新逻辑终点(也就是最后一个未被移除元素的下一个位置);

(4)这些算法都是把原本置于后的的未移除元素向前移动,覆盖被移除元素;

(5)未被移除的元素在相对次序上保持不变;

(6)调用者在调用此算法之后,应保证从此采用返回的新逻辑终点,而不再使用原始终点end;

(7)op不应该在函数调用过程中改变自身状态;

(8)由于会发生元素变动,所以这些算法不可用于关联式容器,关联式容器提供了功能相似的成员函数erase();

(9)list提供了一个等效成员函数remove():不是重新赋值元素,而是重新安排指针,因此具有更加性能;

(10)复杂性:线性;


代码示例:

#include"fuzhu.h"

using namespace std;

int main()
{
	vector<int> coll;

	INSERT_ELEMENTS(coll,2,6);
	INSERT_ELEMENTS(coll,4,9);
	INSERT_ELEMENTS(coll,1,7);

	vector<int>::iterator pos;

	pos=remove(coll.begin(),coll.end(),5);
	
	PRINT_ELEMENTS(coll,"size not change: \n");//vector中一共有3个5,所以后三位是已经不需要的

	cout<<"remove :"<<endl;
	copy(coll.begin(),pos,ostream_iterator<int>(cout," "));
	cout<<endl;

	coll.erase(pos,coll.end());//删除了最后三位

	PRINT_ELEMENTS(coll,"size change: \n");

	coll.erase(remove_if(coll.begin(),coll.end(),bind2nd(less<int>(),4)),coll.end());//移动并删除

	PRINT_ELEMENTS(coll,"<4 elements: \n");

	system("pause");
	return 0;
}

运行结果:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值