STL算法库-删除算法

一、remove
原型:remove(iterator first,iterator last,const T& val)
定义:移除所有值到等于val的元素,函数返回删除后的序列的末尾位置,序列的大小不变,用最后一个元素进行补齐
原型:remove_if(iterator first,iterator last,Pred pr)
定义:移除所有使得pr值为true的元素,函数返回删除后序列的末尾位置,序列的大小不变,用最后一个元素进行补齐

二、remove_copy
原型:remove_copy(iterator1 first,iterator1 last,iterator2 dest,const T& value)
定义:在复制的过程中移除所有值等于value的元素
原型:remove_copy(iterator1 first,iterator1 last,iterator2 dest,Pred pr)
定义:在复制过程中移除所有使得pr为ture的元素

三、unique
原型:unique(iterator first,iterator last)
定义:移除区间中的连续重复元素
原型:unique(iterator first,iterator last,Compare comp)
定义:移除区间中连续的使得comp为true的元素

四、unique_copy
原型;unique(iterator1 first,iterator1 last,iterator2 dest)
定义:复制时移除区间中的连续重复元素
原型:unique(iterator1 first,iterator1 last,iterator2 dest,Compare comp)
定义:复制时移除区间中连续的使得comp为true的元素

示例代码:

#include "stdafx.h"
#include "iostream"
#include "algorithm"
#include "functional"
#include "iterator"
#include "vector"
using namespace std;
bool mylessthan(int ele1,int ele2)
{
 if(ele1>3||ele2>3)
  return true;
 return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
 int source[]={1,4,4,6,1,2,2,3,1,6,6,6,5,7,5,4,4};
 int num=sizeof(source)/sizeof(int);
 vector<int> l1,lll(num,0);
 vector<int> l2(num,0),l3(num,0);
 vector<int>::iterator it1;
 l1.assign(source,source+num);
 cout<<"the original vector l1 is as below"<<endl;
 copy(l1.begin(),l1.end(),ostream_iterator<int>(cout," "));
 cout<<endl;
 cout<<"移?除y元a素?1:"<<endl;
 it1=remove(l1.begin(),l1.end(),1);
 l1.erase(it1,l1.end());
 copy(l1.begin(),l1.end(),ostream_iterator<int>(cout," "));
 cout<<endl;
 cout<<"移?除y所?有D大?于?的?元a素?"<<endl;
 it1=remove_if(l1.begin(),l1.end(),bind2nd(greater<int>(),6));
 l1.erase(it1,l1.end());
 copy(l1.begin(),l1.end(),ostream_iterator<int>(cout," "));
 cout<<endl;
 cout<<"复2制?时?移?除y所?有D等?于?的?元a素?"<<endl;
 it1=remove_copy(l1.begin(),l1.end(),l2.begin(),2);
 copy(l2.begin(),it1,ostream_iterator<int>(cout," "));
 cout<<endl;
 cout<<"复2制?时?移?除y所?有D大?于?的?元a素?"<<endl;
 it1=remove_copy_if(l1.begin(),l1.end(),l3.begin(),bind2nd(greater<int>(),5));
 copy(l3.begin(),it1,ostream_iterator<int>(cout," "));
 cout<<endl;
 cout<<"移?除y所?有D连?续?重?复2的?元a素?"<<endl;
 it1=unique(l3.begin(),l3.end());
 copy(l3.begin(),it1,ostream_iterator<int>(cout," "));
 cout<<endl;
 cout<<"移?除y所?有D的?连?续?的?大?于?的?元a素?"<<endl;
 it1=unique(l3.begin(),l3.end(),mylessthan);
 copy(l3.begin(),it1,ostream_iterator<int>(cout," "));
 cout<<endl;
 return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值