c++ STL中的unique函数用来对容器中相邻的重复元素进行去重操作,使用时必须要#include <algorithm>,常与sort函数搭配使用。值得一提的是unique函数并不会真正剔除容器中的重复元素,而是会返回一个迭代器,容器中该迭代器之前的元素都是经过去重处理的。与sort函数类似,该函数也可自定义“等于”的比较函数。
下面以利用unique函数给vector中元素去重为例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int DataProcess(int num, int* inputArray, int* outputArray)
{
vector<int> elements;
for (int index = 0; index < num; index++)
{
elements.push_back(inputArray[index]);
}
sort(elements.begin(), elements.end());
vector<int>::iterator iterInvalid;
iterInvalid = unique(elements.begin(), elements.end());
elements.erase(iterInvalid, elements.end());
for (int index = 0; index < elements.size(); index++)
{
outputArray[index] = elements[index];
}
return 0;
}
int main()
{
int array[6] = { 1, 2, 3, 3, 2, 1 };
int output[6];
DataProcess(6, array, output);
system("pause");
return 0;
}
在上面的代码中可以看到,为了实现真正的去重,使用了vector中的erase函数来将返回的迭代器之后的数据移除。