这两个通用函数主要用于vector。其他container如list有自己的sort和unique方法
示例:
#include <algorithm>
#include <functional>
#include <vector>
int main(int argc, char **argv)
{
int array1[] = {10, -7, 3, 4, 4, -7};
vector<int> myset(array1, array1+sizeof(array1)/sizeof(int));
myset.push_back(4);
vector<int> vec(myset.begin(), myset.end());
//std::sort(vec.begin(), vec.end(), [&] (int a, int b){return a>b;});//lamda表达式
std::sort(vec.begin(), vec.end(), greater<int>());
auto vecIter = std::unique(vec.begin(), vec.end(), equal_to<int>());
vec.erase(vecIter, vec.end());
for(auto iter=vec.begin(); iter != vec.end(); ++iter)
{
cout<<*iter<<endl;
}
return 0;
}
需要注意的是,unique函数
1、对container中的元素重新排序,移动元素位置,将相邻的重复的元素移到container中处于尾部的位置。
2、返回值:返回一个iterater,指向重新排序后的container中,第一个开始重复元素
3、仅仅“移动”相邻元素中重复的元素,所有如果想要剔除container中所有的元素,需要先进行排序
4、函数仅仅移动元素,并不是真正的删除元素,需要通过erase方法删除元素,这一点与list的unique方法不同(list的unique方法直接删除重复元素,返回类型为void)
5、unique的第三个参数为一个函数指针,在VS2010中可以使用lamda表达式,如果container中元素是内建类型,也可以用equal_to<class T>模板