文档章节

c++ unique函数

清风伴月
 清风伴月
发布于 2017/05/06 22:52
字数 255
阅读 18
收藏 0

c++ unique

std::unique

功能:对有序的容器重新排列,将第一次出现的元素从前往后排,其他重复出现的元素依次排在后面

返回值:返回迭代器,迭代器指向的是重复元素的首地址

看不懂表达的看看下面这个简图:

有序的容器:

1 1 2 3 3 4 4 4 5 6

 

unique处理过的容器:

unique unique unique unique unique unique 迭代器指向的地址      
1 2 3 4 5 6 1 3 4 4

 

#include<iostream>  
#include<string>  
#include <algorithm>  
#include <vector>  
  
using namespace std;  
typedef vector <string> VECTOR_STRING;  
  
void printVec(VECTOR_STRING& vec)  
{  
    for(size_t nItem = 0; nItem < vec.size(); nItem++)  
    {  
        cout << "Name[" << nItem << "] = \" ";  
        cout << vec[nItem] << " \" " << endl;  
    }  
    cout << endl;  
}  
  
int main()  
{  
    VECTOR_STRING vecNames;  
    vecNames.push_back("john");  
    vecNames.push_back("bob");  
    vecNames.push_back("john");  
    vecNames.push_back("vctor");  
    vecNames.push_back("vctor");  
    vecNames.push_back("jim");  
    vecNames.push_back("bob");  
    vecNames.push_back("jim");  
  
    cout << "the initial contents are:" << endl;  
    printVec(vecNames);  
  
    sort(vecNames.begin(), vecNames.end());  
  
    cout << "after sort(), contents are:" << endl;  
    printVec(vecNames);  
  
    VECTOR_STRING::iterator iNameTor;  
    iNameTor = unique(vecNames.begin(), vecNames.end());  
  
    cout << "after unique(), contents are:" << endl;  
    printVec(vecNames);  
  
    cout << "unique return a iterator, point to the first Duplicate element " << endl;  
    cout << iNameTor - vecNames.begin() << endl << endl;  
  
    vecNames.erase(iNameTor, vecNames.end()); //删除重复元素  
    cout << "after erase(), contents are:" << endl;  
    printVec(vecNames);  

 

© 著作权归作者所有

清风伴月
粉丝 1
博文 129
码字总数 255659
作品 0
海淀
程序员
私信 提问
fcppt 0.12.0 发布,C++常用类库

fcppt 0.12.0 改进了 CMake 集成,大大简化了其他基于 CMake 项目使用 fcppt 的便利性;增加了一些新函数,主要在数学计算方面;移除 fcppt.thread ,因为 boost 的原因,boost.thread 已经完...

oschina
2012/11/28
1K
3
C++ 匿名namespace的作用以及它与static的区别

一、匿名namespace的作用 在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则在链接阶段就会发生重定义错误,为了解决这个问题,我们可以在定...

雅各宾
2015/01/30
0
0
消灭“脑细胞杀手”,阿里专家带你深入C++对象的生命周期管理

摘要:C/C++的指针一直是令人又爱又恨的特性。围绕指针产生了许许多多优雅的数据结构和系统实现,但又滋生了不少“脑细胞杀手”——内存Bug。C/C++指针问题(空指针、野指针、垂悬指针)的根...

萌萌怪兽
2018/04/18
0
0
最好的朋友:C++11 移动语义和 Pimpl 手法

当编译器可以用廉价的挪动操作替换昂贵的复制操作时,也就是当它可以用一个指向一个大对象的指针的浅层复制来替换对这个大对象的深层复制的时候,挪动语义要比复制语义更快速。因此,在类中利...

乌合之众
2016/06/08
3K
5
Java程序员如何高效而优雅地入门C++

Java程序员如何高效而优雅地入门Cpp,由于工作需要,需要用C++写一些模块。关于C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 我也算是老手,但也还需要心生敬畏,本文会从...

小欣妹妹
2018/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
1
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
2
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部