博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ Primer 读书笔记 Charpter 11 泛型算法

Posted on 2010-08-20 00:04  KurtWang  阅读(361)  评论(0编辑  收藏  举报
  1. 泛型算法从不执行容器操作,只是单独的依赖迭代器和迭代器操作实现,算法从不直接添加和删除元素(算法可以通过插入器(inserter)执行插入,对插入器赋值即可插入)。
  2. 只读算法:
    1. find(begin, end, search_value);
    2. accumulate(begin, end, 初值)
    3. find_first_of(begin1, end1, begin2, end2):在begin1和end1之中找begin2和end2之中的任意元素匹配的元素,返回迭代器,指向第一个匹配的元素,否则返回第一个范围的end。每对迭代器必须精确匹配,两对迭代器之间不需要类型匹配。
  3. 写容器元素的算法:
    1. fill(begin,end,value);
    2. fill_n(begin,num,value):不考虑当前容器大小
      1. 解决办法:back_inserter。 fill_n(back_inserter(vec),10,0);
    3. copy(vec.begin(),vec.end(),back_inserter(vec)); 效率低,不如作为新构造容器
  4. 对容器元素重新排序的算法
    1. unique(begin,end): 返回一个迭代器,该迭代器指向重复的元素
    2. image
    3. sort(begin,end), stable_sort(begin,end,func):func是比较函数,可以是默认的比较函数
    4. count_if(begin, end, func),func返回bool,判断函数
  5. 插入迭代器:
    1. front_inserter: 类似于back_inserter,使用push_front插入
    2. back_inserter: 使用push_back插入
    3. inserter: 使用insert完成操作,参数1为容器,参数2为指向插入起始位置的迭代器
  6. 反向迭代器:rbegin(), rend(),支持自增自减
  7. 五种迭代器
    1. 输入迭代器:读,不能写,只支持自增
    2. 输出迭代器:写,不能写,只支持自增
    3. 前向迭代器:读和写,只支持自增
    4. 双向迭代器:读和写,支持自增和自减
    5. 随机访问迭代器:读和写,支持完整迭代器算术
    6. map,set,list 提供双向迭代器。
      1. 但map和set的键是const对象,所以不能使用任何写序列的算法,更像支持自减运算的输入迭代器
      2. map,set,list不能使用需要随机访问迭代器的算法,如sort及其相关的算法
    7. string vector deque定义随机访问迭代器
    8. istream_iterator:输入迭代器
    9. ostream_iterator: 输出迭代器
  8. List特有的操作
    1. lst.merge(lst2), lst.merge(lst2,comp):两个list必须排序,lst2的将被删除,前者默认使用<,后者使用comp函数判断大小
    2. lst.remove(value), lst.remove_if(pred)
    3. lst.reverse()
    4. lst.sort()
    5. lst.splice(iter,lst2): 将lst2插入到lst的iter位置
    6. lst.splice(iter, lst2, iter2): 将lst2的iter元素插入到lst的iter位置,lst和lst2可以相等
    7. lst.splice(iter,beg,end):将begin和end之间的元素插入到iter前
    8. lst.unique(), lst.unique(pred):调用erase删除连续副本