Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1774271
  • 博文数量: 198
  • 博客积分: 4088
  • 博客等级: 上校
  • 技术积分: 2391
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-15 16:29
个人简介

游戏开发,系统架构; 博客迁移到:http://www.jianshu.com/u/3ac0504b3b8c

文章分类

全部博文(198)

文章存档

2017年(1)

2016年(12)

2015年(1)

2014年(3)

2013年(13)

2012年(18)

2011年(150)

分类: C/C++

2011-06-14 01:08:05

stl vector unique函数
 我们都知道unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除,不知道这个特性用起来就会出问题。比如下面这个例子,企图输出无重复的元素,中国自学编程网, :
#include
#include
#include
#include
using namespace std;
int main()...{
  vector ivec;
  copy(istream_iterator(cin),istream_iterator(),back_inserter(ivec));
  sort(ivec.begin(),ivec.end());
  unique(ivec.begin(),ivec.end());
  copy(ivec.begin(),ivec.end(),ostream_iterator(cout," "));
  system("pause");
  return 0;
}
  如果输入3 2 1 1 2 3,它的输出是1 2 3 2 3 3——没到达要求。
  unique只是把重复的元素放到容器的后面,而它本身会返回一个迭代器,只向这些元素的开始部分。因此要向真正删除这些元素,还是要“手工”处理一下。对于上面的例子,可以用vector窗口的erase:
int main()...{
    vector ivec;
    copy(istream_iterator(cin),istream_iterator(),back_inserter(ivec));
    sort(ivec.begin(),ivec.end());
    vector::iterator iter=unique(ivec.begin(),ivec.end());
    ivec.erase(iter,ivec.end());
    copy(ivec.begin(),ivec.end(),ostream_iterator(cout," "));
    system("pause");
    return 0;
}
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangyadong/archive/2009/06/03/4239209.aspx
阅读(1160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~