《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
设置命令行参数
运行结果:
标签:10,10.6,容器,链表,算法,words,泛型,习题,include 来源: https://blog.csdn.net/chenyijun/article/details/120633176