关于STL中vector使用unique()去重的问题

本文介绍了 C++ STL 中 Unique 函数的使用方法,并通过示例展示了如何利用该函数去除容器中相邻的重复元素。此外,还提供了一种不依赖排序的去重方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STL中Unique函数的作用是去除相邻重复元素
#include
#include
#include
using namespace std
int main()
{
int a[10] = {7,4,1,7,4,1,7,4,1,0};
sort(a,a+10);//小到大

vector<int>ver(a,a+10);

vector<int>::iterator iter = unique(ver.begin(),ver.end());
ver.erase(iter,ver.end());
forint *t = ver.begin() ; t != ver.end() ; t ++ )
printf("%d ",*t);
return 0;
}
数组排完序之后的结果是a[10]={0,1,1,1,4,4,4,7,7,7};
故此段程序的输出结果是0 1 4 7


另外,也可以实现vector的不排序去重:
方法是在遍历的时候,将相等的元素除第一个外,后面的统统作标记。如:一个字符序列,可以用数字0来标记。应该说,直接将0赋值给这个元素。然后通过另一个容器,在遍历原容器的同时,将没有做标记的元素Push_back 到新容器中。
### 如何使用 `unique` 函数或方法重复元素 在不同编程环境中,`unique` 函数的具体实现方式有所不同。以下是几种常见环境下的具体应用。 #### R语言中的 `unique` 对于R语言来说,在处理向量时可以利用内置的 `unique()` 函数来删除复项并保持首次出现的数据[^1]: ```r vec <- c(1, 2, 3, 2, 4, 1) print("原始向量:") print(vec) unique_vec <- unique(vec) print("移除重复元素后的向量:") print(unique_vec) ``` 这段代码创建了一个含有复数值的向量 `vec` ,接着调用了 `unique()` 来获取不带任何复值的新版本 `unique_vec`. #### Python NumPy库中的 `np.unique()` Python中NumPy库提供了类似的解决方案——`np.unique()` 方法能够有效地清理一维或多维数组里的冗余数据[^3]: ```python import numpy as np data = np.array([1, 2, 3, 2, 4, 1]) unique_values = np.unique(data) print("原始数组:", data) print("后的数组:", unique_values) ``` 此段脚本展示了怎样借助 `np.unique()` 实现相同的功能;它接受一个numpy array作为输入参数,并返回一个新的仅含独一无二条目的array对象. #### C++ STL 中的 `std::unique` 而在C++标准模板库(STL),虽然也有名为 `unique` 的算法,但它的工作机制略有差异:该函数不会直接改变原容器大小而是将所有非连续相同的项目向前移动至前面部分形成有效区间,随后给出指向新序列末端位置之后一位的位置指示器(iterator)。因此要真正意义上完成清除操作还需要配合erase成员函数一起使用[^4]. ```cpp #include <algorithm> #include <vector> using namespace std; int main(){ vector<int> v{1, 2, 3, 2, 4, 1}; auto last = unique(v.begin(), v.end()); v.erase(last, v.end()); // 打印结果... } ``` 上述例子说明了如何结合 `std::unique` 和 `erase` 成员函数达到彻底消除列表里多余副本的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值