-
概述
- 标准范型算法不依赖任何类型,唯一隐式依赖的情况是,必须能够对元素做比较。
- 我在想每次比如查找失败的时候返回的一般都是容器的末端迭代器,为什么不返回false,设计者是为了表示对原则的恪守,还是有必须这样做的理由呢。
- 范型算法需要容器内元素能够比较,就是要支持
==
操作,假如不支持的话,还有后备方案,就是需要一个额外参数:实现元素比较的函数名字。 - 算法永远不会执行特定容器提供的操作,这是原则,假如那种容器不支持这种操作,那就麻烦了。我们写程序的时候最好也要有原则,显得有条理,耦合性也低一点。
-
算法举例
- 只读算法
- 写入算法,相当于只覆盖已有的元素内容,要小心容器的大小不够。
- 插入算法,引入了back_inserter
- 算法的_copy版本。比如replace和replace_copy 有什么区别
- unique算法,把重复的元素移到末尾去。
- sort和stable_sort
-
再谈迭代器
- 标准库定义的迭代器不依赖于特定容器,这句话里有内涵。假如自己定义的iterator,让它等于vec.begin(),这里发生了什么转换吗
- insert iterators 和容器绑定在一起,实现在容器中插入元素的功能
- 流迭代器istream_iterator
- 反向迭代器
- const迭代器
- 迭代器总结出来有五种。
- 注意:向算法传递无效的迭代器类别所引发的错误,编译器期间可能无法捕获。
-
泛型算法的结构
- 所有的容器都建立在一致的设计模式上,算法也有共同的设计基础。
- 其实这里要用的话,只要查文档看算法就行了。
-
容器特有的算法
- 因为不是每一个算法都适用与某个容器,就算能用但从性能上来说也没必要,所以有的容器有自己的算法,比如list就有很多自己的算法。