为什么我是用了unique_copy()后没有效果。。。

tidus877 2010-06-23 05:53:38
源代码如下:目的是实现把不重复的数字复制到另外一个容器中

#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
#include<list>
using namespace std;
int main()
{
int ia[]={1,2,3,4,100,5,100};
vector <int>lst(ia,ia+7);

vector <int>ivec;
unique_copy(lst.begin(),lst.end(),back_inserter(ivec));
for(vector<int> ::iterator iter = ivec.begin();iter!=ivec.end();iter++)
{
cout << *iter <<" ";
}
cout << endl;
return 0;
}
编译都通过,运行结果是1 2 3 4 100 5 100但是unique_copy的效果没有发挥出来。。。百思不得其解。。。
后来在那个空白行的地方加上sort(lst.begin(),lst.end());运行后是1 2 3 4 5 100,重复的100成功的去掉。
不知道为什么。。。。求大师指点一下。。。
还有一点疑问的是,正在看c++primer的泛型算法这一章,其实这个程序一开始编的时侯那个lst的容器我用的是list后来编译出现N多错误,想了很长时间,发现可能是list容易不支持sort()这个算法的原因。但是书里面也没说,我觉得这样的话使用这些算法还有有点畏手畏脚的,作为一个初学者,我应该注意点什么。。。(我真的是盯着这个程序看了1个多小时,后来突然想到会不会是sort()出问题,然后改了之后,虽然通过,然是还是不知道为什么,后来去网上一搜,发现有人说list有自己的sort()成员函数,但是不支持泛型算法里面的sort())。。。谢谢,打扰了。。。


...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyster2008 2010-06-23
  • 打赏
  • 举报
回复
unique_copy只能去掉相邻的重复元素,所以你sort之后可以得到正确的结果
泛型算法里面的sort只能应用于随机迭代器,而list的迭代器不满足这一要求,故不能使用
taodm 2010-06-23
  • 打赏
  • 举报
回复
去买本《stl源码剖析》吧
tidus877 2010-06-23
  • 打赏
  • 举报
回复
忘了说,我用的是code::blocks。。。
taodm 2010-06-23
  • 打赏
  • 举报
回复
《stl源码剖析》不是让你看的,是让你查的。要用啥stl里的东西,就到上面查说明
tidus877 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taodm 的回复:]

去买本《stl源码剖析》吧
[/Quote]你好,我之前看过两本大学里面的c++教材,好像是清华的,现在在看c++primer,看完一半多了,感觉收获挺大的,算是反复看了3到4遍,刚才您推荐我去看stl源码分析,这本书,我是现在同步着看呢,还是等把primer看完在看?感觉现在自己看的多,练的少,没有经过完成程序的历练,所以我现在需要注意点什么呢,干粉感谢~~~~~祝顺利~~
tidus877 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 oyster2008 的回复:]

unique_copy只能去掉相邻的重复元素,所以你sort之后可以得到正确的结果
泛型算法里面的sort只能应用于随机迭代器,而list的迭代器不满足这一要求,故不能使用
[/Quote]额。。谢谢,刚才那段程序是c++primer 第四版习题的答案。。。这样的话,看来答案是错了。。。谢谢指导~~~~~
ForestDB 2010-06-23
  • 打赏
  • 举报
回复
unique_copy是针对排过序的区间才能起作用,所以要先sort下。

建议可以多读点tutorial和manual,list的确不支持sort,有它自己的sort。

建议多Google。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧