《泛型编程与STL》读书笔记
来源:互联网 发布:淘宝借贷逾期 编辑:程序博客网 时间:2024/04/23 21:56
通读《泛型编程与STL》,总的感觉是这本书前后反差较大,前半部分非常抽象,后半部分-类似一个API速查手册,相对简单。
STL主要涉及三个方面:容器,迭代器,算法,各自职责为:容器存数据,迭代器取数据,算法操纵数据。它们之间的简单关系是:算法通过迭代器操作容器,容器通过迭代器访问自身数据元素。可以说,迭代器做到了让算法和容器解耦,同时,模板又做到了让迭代器与数据类型解耦。迭代器起到了关键的桥梁作用。
迭代器按类型来分可分为五类,名称分别为 InputIterator/OutputIterator/FowardIterator/Bidirectional/RandomAccessIterator。 InputIterator/OutputIterator是功能最简单的迭代器,一个为只读(读指从容器中取数据),一个为只写(写指将数据写入容器),迭代器只支持向前;FowardIterator可读可写,迭代器也是只支持向前;Bidirectional迭代器支持向前向后两个方向,和前三个相同,一次只能前进一个位移;RandomAccessIterator的迭代器支持+n操作。除了强两个,后三个迭代器都是前一个功能的超集,或者说是前一个的refinement。它们之间的相对关系如下:
举个例子,不同的算法对迭代器的要求可能不同:一般的find算法,只需要一个InputIterator就可以了;对于replace算法,在读的同时还需要写,则至少需要是FowardIterator。下面的例子,square方法中的ForwardIterator可以换成InputIterator或OutputIterator吗?答案是不可以,因为需要可读可写。
#include <iostream>#include <fstream>#include <iterator>#include <vector>using namespace std;template<typename ForwardIterator>void square(ForwardIterator first, ForwardIterator last){ cout << "Squares: "; for(;first != last; first++) { *first = (*first) * (*first); cout << *first << " "; } cout << endl;}int main(){ int arr[] = {1, 2, 3, 4, 5}; vector<int> v(arr, arr + sizeof(arr)/sizeof(arr[0])); cout << "Elements: "; for(auto it : v ) { cout << it << " "; } cout << endl; square(v.begin(), v.end()); return 0;}
TBD
- 泛型编程与STL 读书笔记
- 《泛型编程与STL》读书笔记
- 《泛型编程与STL》读书笔记
- 《泛型编程与STL》读书笔记
- 泛型编程与STL——读书笔记
- 泛型编程与STL
- 泛型编程与STL
- STL与泛型编程
- STL与泛型编程
- 泛型编程与STL
- 《泛型编程与stl》
- 泛型编程与STL
- 泛型编程与STL核心要素
- 泛型编程与STL之 container
- 泛型编程与STL(三):容器
- 泛型编程与STL学习-iterators
- 泛型编程与STL学习-Containers
- STL与泛型编程入门
- 1412202049-hpu-1004:C语言考试练习题_保留字母
- CentOS 6.6/Fedora 21 源码编译安装 mysql 5.6.22
- monkey测试一些常用的命令
- Qwt直方图例子注释
- libevent笔记-事件/事件循环
- 《泛型编程与STL》读书笔记
- Spring MVC国际化配置
- Java中设计模式——装饰类(传智播客毕老师视频讲解)
- heapSort之应用
- asp.net实现ftp上传代码(解决大文件上传问题)
- 复习pdo,插入,查询
- USACO 刷水
- 说“无法对数据库'Alarm'执行删除,因为它正用于复制”
- hive表数据导出到csv乱码原因及解决方案