Chapter 11. Generic Algorithms

  • 概述

    • 标准范型算法不依赖任何类型,唯一隐式依赖的情况是,必须能够对元素做比较。
    • 我在想每次比如查找失败的时候返回的一般都是容器的末端迭代器,为什么不返回false,设计者是为了表示对原则的恪守,还是有必须这样做的理由呢。
    • 范型算法需要容器内元素能够比较,就是要支持==操作,假如不支持的话,还有后备方案,就是需要一个额外参数:实现元素比较的函数名字。
    • 算法永远不会执行特定容器提供的操作,这是原则,假如那种容器不支持这种操作,那就麻烦了。我们写程序的时候最好也要有原则,显得有条理,耦合性也低一点。
  • 算法举例

    • 只读算法
    • 写入算法,相当于只覆盖已有的元素内容,要小心容器的大小不够。
    • 插入算法,引入了back_inserter
    • 算法的_copy版本。比如replace和replace_copy 有什么区别
    • unique算法,把重复的元素移到末尾去。
    • sort和stable_sort
  • 再谈迭代器

    • 标准库定义的迭代器不依赖于特定容器,这句话里有内涵。假如自己定义的iterator,让它等于vec.begin(),这里发生了什么转换吗
    • insert iterators 和容器绑定在一起,实现在容器中插入元素的功能
    • 流迭代器istream_iterator
    • 反向迭代器
    • const迭代器
    • 迭代器总结出来有五种。
    • 注意:向算法传递无效的迭代器类别所引发的错误,编译器期间可能无法捕获。
  • 泛型算法的结构

    • 所有的容器都建立在一致的设计模式上,算法也有共同的设计基础。
    • 其实这里要用的话,只要查文档看算法就行了。
  • 容器特有的算法

    • 因为不是每一个算法都适用与某个容器,就算能用但从性能上来说也没必要,所以有的容器有自己的算法,比如list就有很多自己的算法。
posted @ 2016-02-29 16:48  arctanx  阅读(170)  评论(0编辑  收藏  举报