C++ unique函数与lower

mac2024-12-17  27

大佬博客 https://www.cnblogs.com/wushengyang/p/10902240.html

 

切记,没有排序前只是去掉**相邻的**重复元素,如果要真正去重就要排序

 1. 现在总结一下unique,unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),也有大佬说是将没有重复的元素放到前面,而不是将重复的放到末尾。而返回值是去重之后的尾地址,下面举个例子。  2. 由于返回的是容器末尾(末地址),所以如果想得到去重后的长度,需要减去初始地址,lower_bound是得到地址,稍微不同。  

用法:

常规用法:

len = unique(b + 1,b + n + 1)-(b + 1); len = unique(a,a + n) - a;

获得一个无相邻重复字符的字符串:

sort(words.begin(), words.end()); vector<string>::iterator end_unique = unique(words.begin(), words.end()); words.erase(end_unique, words.end());

看个例子了解去重的情况

 

#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> v; v.push_back(1); v.push_back(1); v.push_back(1); v.push_back(4); v.push_back(6); v.push_back(6); v.push_back(7); vector<int>::iterator it = unique(v.begin(),v.end()); cout<< v.size() <<endl; // v.erase(it,v.end()); for(it = v.begin();it != v.end();it++) { cout << *it << " "; } return 0; }

代码中若没注释v.erase(it.end())

输出结果为:

7

1 4 6 7

否则为:

7 1 4 6 7 6 6 7

可能会很奇怪为什么不是 

7 1 4 6 7 1 1 6

说明去重后,被放在最后面的几个重复元素都变成了去重后的数组后面几个对应的元素

例如:去重后的数组是1 4 6 7,此时有3个重复元素1 1 6,对应最后面两个元素6 7,所以输出6 6 7(可自行验证)

最新回复(0)