蓝桥杯基础知识5 unique()
#include <bits/stdc++.h>
int main(){
std::vector<int> vec = {1,1,2,2,3,3,3,4,4,5};
auto it = std::unique(vec.begin(), vec.end());
vec.erase(it, vec.end());
//vec.erase(unique(vec.begin(),vec.end()),vec.end()) //将重复的区域删除
//1, 2, 3, 4, 5, 1, 2, 3, 4
//begin it end
for(int num : vec)std::cout << num << " ";
//1, 2, 3, 4, 5
std::cout << std::endl;
return 0;
}
C++ 在线工具 | 菜鸟工具 (runoob.com)
注意:
unique()只能去除相邻的重复元素,如果容器中存在非相邻的重复元素,则无法去除。
可以先对容器元素进行排序sort(),再使用unique();
sort()时间复杂度为O(nlogn),unique()时间复杂度为O(n)。
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[] = {1,1,2,2,3};
int n = unique(a, a + 5) - a;
for(int i : a)cout << i << " "; // 1, 2, 3, 2, 3
cout << endl;
for(int i = 0; i < n; ++i)cout << a[i] << " "; // 1, 2, 3
cout << endl;
for(int i = 0; i < 5; ++i)cout << a[i] << " "; // 1, 2, 3, 2, 3
cout << endl; //去重元素
int b[] = {3,1,2,2,3};
int m = unique(b, b + 5) - b;
for(int j : b)cout << j << " "; // 3, 1, 2, 3, 3
cout << endl;
for(int j = 0; j < m; ++j)cout << b[j] << " "; // 3, 1, 2, 3
//不能写成for(int j : b)cout << j << " ";否则报错
cout << endl;
sort(b, b + 5);
int k = unique(b, b + 5) - b;
for(int j = 0; j < k; ++j)cout << b[j] << " "; // 1, 2, 3
cout << endl;
return 0;
}
unique并不是真正地将重复元素进行了删除,而是不断将不重复的元素移动到数组的前面,最后返回的是去重后的不重复数列中最后一个元素的下一个元素的地址,如果需要计算该地址所对应的下标,则利用unique(a,a+n)-a即可。
template<class ForwaedIt>
ForwardIt unique(ForwardIt first, ForwardIt last);
unique()是一个用于去除容器中相邻重复元素的函数。定义在<algorithm>头文件中。
first:指向容器中要去重的第一个元素的迭代器。
last:指向容器中要去重的最后一个元素的下一个位置的迭代器。
类reverse(),reverse是反转。
unique()将 [first, last) 范围内的相邻重复元素去除,
并返回一个指向去重后范围的末尾后的迭代器。
去重后的范围只保留了第一个出现的元素,
后续重复元素都被移除。
可用于数组、向量、链表等。
不删除所有重复的元素,而是通过将序列中存在的下一个元素替换为
与当前要替换的当前元素不重复的下一个元素来消除重复性。
所有被替换的元素都处于未指定状态。
去重后不会更改容器的大小,仅返回一个指向容器新端的指针,
并根据此指针来调整容器的大小或删除容器的大小。
reference:
C++ std::unique用法及代码示例 - 纯净天空 (vimsky.com)
std::unique - C++中文 - API参考文档 (apiref.com)
c++ unique函数详解-CSDN博客
unique函数用法-CSDN博客文章来源:https://www.toymoban.com/news/detail-809076.html
【C++】vector中erase用法_c++ vector erase-CSDN博客文章来源地址https://www.toymoban.com/news/detail-809076.html
到了这里,关于蓝桥杯基础知识5 unique()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!