用STL去除重复元素的简单操作

本文详细介绍了C++标准模板库(STL)中unique函数的用法及注意事项,包括其如何去除相邻重复元素,并结合sort函数使用的方法。通过具体代码示例展示了vector容器中unique函数的应用,以及如何结合erase函数实现真正意义上的重复元素去除。

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

以求无重复集合为例:

ExpandedBlockStart.gif代码
#include<iostream>
#include
<algorithm>//for_each函数
#include<list>

using namespace std; 
void Print(double n){cout<<n;}
int main(){
    
int arr[20]={5,4,6,3,4,2,3,5,6,7,3,4,6,7,5,4,3,2,5,4};
    list
<int> arrI;
    
for(int i=0;i<20;i++)
        arrI.push_back(arr[i]);
    arrI.sort();
    arrI.unique();
    for_each(arrI.begin(),arrI.end(),Print);
    
return 0;
}

 

注:unique函数功能是去除相邻的重复元素,注意是相邻,所以必须先使用sort函数。

对于大多数的STL,unique并不能真正的删除重复元素,而是把重复的一些放在最后,如vector见下例:

 

ExpandedBlockStart.gif代码
#include <iostream>
#include 
<algorithm>
#include 
<vector>
using namespace std;

bool myfunction (int i, int j) {
  
return (i==j);
}

int main () {
  
int myints[] = {10,20,20,20,30,30,20,20,10};    // 10 20 20 20 30 30 20 20 10
  vector<int> myvector (myints,myints+9);
  vector
<int>::iterator it;

  
// using default comparison:
  it = unique (myvector.begin(), myvector.end()); // 10 20 30 20 10 30 20 20 10
                                                  
//                ^

  myvector.resize( it 
- myvector.begin() );       // 10 20 30 20 10

  
// using predicate comparison:
  unique (myvector.begin(), myvector.end(), myfunction);   // (no changes)

  
// print out content:
  cout << "myvector contains:";
  
for (it=myvector.begin(); it!=myvector.end(); ++it)
    cout 
<< " " << *it;

  cout 
<< endl;

  
return 0;
}

 

 

这个例子把unique的功能,返回值表现的非常清楚;

如果熟悉,还可以再简短一些:

 

a.erase(unique(a.begin(), a.end()), a.end())

 

 

转载于:https://www.cnblogs.com/ziqiao/archive/2010/11/06/1870675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值