C++ Primer 习题11.15分析
来源:互联网 发布:美国失业率数据 编辑:程序博客网 时间:2024/04/30 22:06
题目:
算法标准库定义了一个名为unique_copy的函数,其操作与unique类似,唯一的区别在于:前者接受第三个迭代器实参,用于指定复制不重复元素的目标序列。编写程序,使用unique_copy将一个list对象中不重复的元素复制到一个空的vector容器中。
原有答案如下:
#include <iostream>#include <iterator>#include <vector>#include <algorithm>#include <list>using namespace std;int main(){int array[]={1,2,3,4,100,5,100};list<int> ilst(array,array+7);vector<int> ivec;//将list对象ilst不重复的元素复制到一个空vector对象ivec中unique_copy(ilst.begin(),ilst.end(),back_inserter(ivec));//输出vector容器for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)cout<<*iter<<" ";cout<<endl;return 0;}
结果如下图:
很明显,结果并没有去除重复元素,unique_copy()没有起作用。为什么呢?分析如下:
- unique_copy无法只拷贝ilst中所存在的惟一值,如上题,计划中的结果为“1 2 3 4 100 5”,实际的结果却是“1 2 3 4 100 5 100”。造成这种结果的原因是,unique_copy()只会去掉相邻重复元素,而我们的数据中重复数字100并没有相邻。解决方法是,在运用unique_copy之前增加sort排序函数。
- 不能对list器直接使用sort函数。因为sort函数只对随机迭代器有作用,而list的迭代器不是随机迭代器,其是可读可写遍历迭代器,故list提供了自己的sort()和sort(Cmp);。解决办法是,可将list容器更改为vector容器(当然这不符合题目要求)或者使用list排序函数。
#include <iostream>#include <iterator>#include <vector>#include <algorithm>#include <list>using namespace std;int main(){int array[7]={1,2,3,4,100,5,100};list<int> ilst(array,array+7);vector<int> ivec;ilst.sort();//使用list容器提供的自己的排序函数sort() //在使用unique_copy()之前排序是必不可少的//将list对象ilst不重复的元素复制到一个空vector对象ivec中unique_copy(ilst.begin(),ilst.end(),back_inserter(ivec));//输出vector容器for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)cout<<*iter<<'\t';cout<<endl;return 0;}结果如下图,这样就正确了
0 1
- C++ Primer 习题11.15分析
- 《c++primer(第四版)》习题11.15
- c++primer 习题9.12
- c++primer 习题9.35
- c++primer 习题9.36
- c++primer 习题9.18
- c++primer 习题9.20
- c++primer 习题9.42
- c++primer 习题9.43
- c++primer 习题9.26
- C++Primer习题6.12
- C++primer习题6.20
- C++Primer习题9.26
- C++Primer 习题9.38
- C++Primer 习题9.39
- C++Primer习题9.40
- C++Primer习题10.9
- C++Primer习题6.12
- Shell命令总结
- 13.Hibernate双向无链表的1-N映射
- 关于WPS中的PPT学习
- LED循环播放节目
- 显示动画,隐式动画、关键帧动画
- C++ Primer 习题11.15分析
- 32位系统与64位系统之自我问答
- onSaveInstanceState()方法使用注意点
- UITableViewCell里UIButton实现push的代理和block
- HDU5124 lines(离散)
- Hibernate的集合映射(Set、List、Array、Map、Bag)
- 顺序栈
- Hibernate(二)HQL&SQL参数绑定、投影和分页以及命名查询
- 黑马程序员--oc:面向对象语法