《C++ Primer》第10章 10.6节习题答案
2021/10/7 11:10:55
本文主要是介绍《C++ Primer》第10章 10.6节习题答案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
《C++ Primer》第10章 泛型算法
10.6节特定容器算法 习题答案
练习10.42:使用list代替vector重新实现10.2.3节(第343页)中的去除重复单词的程序。
【出题思路】
练习链表的特殊操作。
【解答】
本题要使用链表专用的sort和unique算法,与泛型算法的不同点有如下两点:
1.它们是以链表类的成员函数形式实现的,因此使用方式是在链表对象上调用它们,也并不需要迭代器参数指出处理的序列。
2.由于是以成员函数形式实现的,是直接操作容器而非通过迭代器访问容器元素,因此这些算法具有修改容器的能力(添加、删除元素)。例如,unique会调用erase直接真正删除重复元素,容器的大小会变小,而不是像泛型unique算法那样只是覆盖重复元素,并不改变容器大小。因此程序已不再需要调用erase了。
建议读者好好体会泛型算法和专用算法之间的差异,包括上述使用方式上的差异,以及从库的开发者的角度思考两种方式的差异。
#include <iostream> #include <fstream> #include <list> #include <string> #include <algorithm> using namespace std; inline void output_words(list<string> &words) { for(auto iter = words.begin(); iter != words.end(); iter++) cout << *iter << " "; cout << endl; } void elimDups(list<string> &words) { output_words(words); words.sort(); output_words(words); words.unique(); output_words(words); } int main(int argc, const char *argv[]) { ifstream in(argv[1]); if(!in) { cout << "打开输入文件失败!" << endl; exit(1); } list<string> words; string word; while(in >> word) words.push_back(word); elimDups(words); return 0; }
data10_42.txt文件内容为:
the quick red fox jumps over the the slow over red turtle
设置命令行参数
运行结果:
这篇关于《C++ Primer》第10章 10.6节习题答案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享