//本实例演示容器中各种删除操作的正确玩法
//涉及remove erase remove_if remove_copy unique等函数
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
int source[]={1,4,7,8,1,2,2,3,1,6,6,6,5,7,1,8,8,7,3};
int num=sizeof(source)/sizeof(int);
vector<int> l1;
vector<int> l2(num,0); //num个0初始化l2
vector<int>::iterator it1;
l1.assign(source,source+num); //利用数组完成对l1的初始化
cout<<"l1:"<<endl;
copy(l1.begin(),l1.end(),ostream_iterator<int>(cout,",")); //显示l1
cout<<endl;
it1=remove(l1.begin(),l1.end(),1); //将l1中值为1的元素删除
cout<<"remove 1 from l1:"<<endl;
copy(l1.begin(),l1.end(),ostream_iterator<int>(cout,",")); //显示l1
cout<<endl;
l1.erase(it1,l1.end()); //利用erase函数将删除的值为1的元素所占空间删除
cout<<"erase from l1:"<<endl;
copy(l1.begin(),l1.end(),ostream_iterator<int>(cout,",")); //显示l1
cout<<endl;
it1=remove_if(l1.begin(),l1.end(),bind2nd(greater<int>(),6)); //将l1中大于6的元素删除
l1.erase(it1,l1.end()); //删除大于6的元素所占的空间
cout<<"remove and erase >6 from l1:"<<endl;
copy(l1.begin(),l1.end(),ostream_iterator<int>(cout,",")); //显示l1
cout<<endl;
//remove_copy的使用,一边复制,一边移除
it1=remove_copy(l1.begin(),l1.end(),l2.begin(),6); //将l1移除元素6后复制到l2
cout<<"remove_copy 6 from l1 to l2 and partial shows l2:"<<endl;
copy(l2.begin(),it1,ostream_iterator<int>(cout,",")); //显示l2,注意it1作为l2的结尾使用
cout<<endl;
l2.erase(it1,l2.end());
it1=unique(l2.begin(),l2.end()); //删除l2中的相同元素
l2.erase(--it1,l2.end()); //擦除l2中相同元素所占的空间
cout<<"unique and erase from l2:"<<endl;
copy(l2.begin(),l2.end(),ostream_iterator<int>(cout,",")); //显示l2
cout<<endl;
return 0;
}
