10.38 输入迭代器:只读,不写,单遍扫描,只递增;支持前置和后置++,==,!=,*,-> 输出迭代器:只写,不读,单遍扫描,只递增;支持前置和后置++, * 前向迭代器:可读写;多遍扫描,只能递增;支持所有输入输出迭代器的操作 双向迭代器:可读写;多遍扫描,可递增递减;支持所有前向迭代器的操作,加上前置和后置的-- 随机访问迭代器:可读写,多遍扫描,支持全部迭代器运算,即除前四种迭代器操作外,加上关系运算符(<, >, <=, >=),加减运算(+, +=, -, -=),减法(-,得到两个迭代器的距离),下标运算符
10.39 list属于双向迭代器,vector属于随机访问迭代器。
10.40 copy的前两个参数至少是输入迭代器,第三个参数至少是输出迭代器;reverse两个参数至少是双向迭代器;unique两个参数至少是前向迭代器。
10.41 replace:将[beg, end)间的old_val替换为new_val replace_if:将[beg, end)间满足谓词pred的元素替换为new_val replace_copy:将[beg, end)间的元素拷贝到dest,并把old_val替换为new_val replace_copy_if:将[beg, end)间的元素拷贝到dest,并把满足谓词pred的元素替换为new_val
10.42 sort和unique使用list的成员函数版本
#include <algorithm> #include <list> using namespace std; void elimDups(list<string> &words) { for (auto w : words) cout << w << " "; cout << endl; words.sort(); for (auto w : words) cout << w << " "; cout << endl; words.unique(); for (auto w : words) cout << w << " "; cout << endl; } int main() { list<string> slist = {"the", "quick", "red", "fox", "jumps", "over", "the", "slow", "red", "turtle"}; elimDups(slist); return 0; }