Skip to content

Latest commit

 

History

History
169 lines (127 loc) · 4.04 KB

chapter-10-answer.md

File metadata and controls

169 lines (127 loc) · 4.04 KB
(a)
vector<int> vec;
list<int> lst;
int i;
while(cin >> i)
    lst.push_back(i);
vec.resize(lst.size());
copy(lst.cbegin(), lst.cend(), vec.begin());

(b)
vector<int> vec(10);
fill_n(vec.beigin(), 10, 0);
  • 练习10.8
    因为算法本身不改变容器大小,但是用back_inserter迭代器的内部操作,调用push_back来改变。

  • 练习10.9
    10.9程序代码

  • 练习10.10

  1. 使算法独立于各种容器,甚至内置数组也能正常使用算法
  2. 改变容器大小会使迭代器失效
[](int i,int j){ return i+j; }
  1. 输入迭代器
    == != ++ 解引用和-> 仅用于读取
  2. 输出迭代器 ++ 解引用 仅用于输出
  3. 前向迭代器
    == != ++ 解引用和-> 读取和输出
  4. 双向迭代器
    == != ++ -- 解引用和-> 读取和输出
  5. 随机访问迭代器 == != ++ -- +n -n [n] it1-it2 解引用和-> 读取和输出
  • 练习10.39
    list的迭代器属于双向迭代器
    vector上的迭代器属于随机访问迭代器

  • 练习10.40
    copy要求输入迭代器和输出迭代器
    reverse要求双向迭代器
    unique要求前向迭代器

  • 练习10.41
    replace(beg, end, old_val, new_val);
    在[beg, end)中用新值替换旧值
    replace_if(beg, end, pred, new_val);
    在[beg, end)中调用pred非0的用新值替换旧值
    replace_copy(beg, end, dest, old_val, new_val);
    在[beg, end)中用新值替换旧值,复制到dest中
    replace_copy_if(beg, end, dest, pred, new_val);
    在[beg, end)中调用pred非0的用新值替换旧值,复制到dest中

  • 练习10.42
    10.42 用list改写elimDups程序代码