重温《STL源码剖析》笔记 第一章
源码之前,了无秘密。 --侯杰
经典的书,确实每看一遍都能重新收获一遍:
第一章:STL简介
STL的设计思维:对象的耦合性极低,复用性极高,符合开发封闭原则的程序库。
STL的价值:1.带给我们一套极具实用价值的零部件,以及一个整合的组织。
2.带给我们一个高层次的以泛型思维为基础的、系统化的、条理分明的“软件组件分类学”。
在STL接口之下,任何组件都有最大的独立性,并以所谓迭代器胶合起来,或以配接器互相配接,或以所
谓仿函数动态选择某种策略。
STL六大组件:1.容器(containers):各种数据结构,如vector,list,deque,set,map用来存放数据。
2.算法(algorithms):各种常用算法,如sort,search,copy,erase,etc。从实现的角度看
STL算法是一种function template
3.迭代器(iterators):扮演容器与算法之间的胶合剂,是“泛型指针”。一种将operator*,
operator->,operator++,operator--等予以重载的class template。
4.仿函数(functors):行为类似函数,可作为算法的某种策略。一种重载了operator()的class
或class template.一般函数指针可视为狭义的仿函数
5.配接器(adapters):一种是用来修饰容器、仿函数、迭代器接口的东西。比如:queue
和stack是一个容器配接器,所有操作由底层deque供应。
6.配置器:负责空间配置与管理。实现了动态空间配置、空间管理、空间释放的
class template
STL六大组件的交互关系:Container通过Allocator取得数据存储空间;Algorithms通过Iterator存取
Container内容,Functor可以协助Algorithm完成不同的策略变化(比如qsor的最后一个参数),Adapter
可以修饰或套接Functor。
图形如下:
GNU:GNU is Not Unix 是不是递归了,呵呵--
STL版本,最早的是HP版本,本书介绍的是SGI STL版本
美妙的源代码:
template<class Interactor, class T>
Interactor find(Interactor first, Interactor last, const T& value) {
while(first != last && *first != value) {
++first;
}
return first;
} #if defined(_STL_NEED_BOOL)
typedef int bool;
# define true
# define false
#endif
采用前闭后开区间表示法[)。迭代器last所指的是“最后一个元素的下一个位置”
仿函数代码实现:
template<class T>
struct plus {
T operator() (const T& x, const T& y) const {
return x+y;
}
};
int main() {
//以下产生仿函数对象
plus<int> plusobj;
//以下使用仿函数,就像使用一般函数一样
cout << plusobj(,) << endl; //8
//以下直接产生仿函数的临时对象(第一对小括号),并调用之(第二对括号)
cout << plus<int>()(,) <<endl; //
重温《STL源码剖析》笔记 第一章的更多相关文章
- 《STL源码剖析》——第一、二、三章
第一章:概论: 换句话说,STL所实现的,是依据泛型思维架设起来的一个概念结构.这个以抽象概念(abstract concepts)为主体而非以实际类(classes)为主体的结构,形成了一个严谨的 ...
- Stl源码剖析 第三章 iterator摘要
1. Stl的设计思想是: 将数据容器和算法分开,彼此独立设计,最后再以一贴胶合剂将它们撮合在一起,这个胶合剂就是迭代器. 2. 从3.2节迭代器的实现可知,如果要设计一个与容器分离实现的迭代器,会暴 ...
- STL源码剖析读书笔记之vector
STL源码剖析读书笔记之vector 1.vector概述 vector是一种序列式容器,我的理解是vector就像数组.但是数组有一个很大的问题就是当我们分配 一个一定大小的数组的时候,起初也许我们 ...
- 《STL源码剖析》读书笔记
转载:https://www.cnblogs.com/xiaoyi115/p/3721922.html 直接逼入正题. Standard Template Library简称STL.STL可分为容器( ...
- 通读《STL源码剖析》之后的一点读书笔记
直接逼入正题. Standard Template Library简称STL.STL可分为容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adap ...
- c++ stl源码剖析学习笔记(一)uninitialized_copy()函数
template <class InputIterator, class ForwardIterator>inline ForwardIterator uninitialized_copy ...
- 《STL源码剖析》环境配置
首先,去侯捷网站下载相关文档:http://jjhou.boolan.com/jjwbooks-tass.htm. 这本书采用的是Cygnus C++ 2.91 for windows.下载地址:ht ...
- 面试题总结(三)、《STL源码剖析》相关面试题总结
声明:本文主要探讨与STL实现相关的面试题,主要参考侯捷的<STL源码剖析>,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助 ...
- 【STL 源码剖析】浅谈 STL 迭代器与 traits 编程技法
大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub : https://github.com/rongweihe/Mor ...
- STL"源码"剖析-重点知识总结
STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合 ...
随机推荐
- C语言中,#include <>和#include ""的区别和注意点
C语言中包含文件有两种包含符号,一个是<>尖括号,另一个是""双引号.那么这两个有什么区别呢? 首先在本地建立一个空文件,命名为stdio.h. 然后再建立一个C文件, ...
- 手把手带你画一个漂亮蜂窝view Android自定义view
上一篇做了一个水波纹view 不知道大家有没有动手试试呢点击打开链接 这个效果做起来好像没什么意义,如果不加监听回调 图片就能直接替代.写这篇博客的目的是锻炼一下思维能力,以更好的面多各种自定义vi ...
- AngularJS进阶(二十三)ANGULAR三宗罪之版本陷阱
ANGULAR三宗罪之版本陷阱 坑!碰到个大坑,前面由于绑定日期时将angular版本换为angular-1.3.0-beta.1时,后来午睡后,登录系统,发现无论如何都登陆不进去了,经过调试,发现数 ...
- android cookie持久化
原博客地址:http://blog.csdn.net/shimiso/article/details/39033353 在解析网页信息的时候,需要登录后才能访问,所以使用httpclient模拟登录, ...
- linux测试noatime对文件访问时间的影响
linux测试noatime对文件访问时间的影响 文件(如abc)有3个时间: # stat abc Access: 2015-04-16 19:30:13.665970572 +0800 Modif ...
- 【一天一道LeetCode】 #1 Two Sum
一天一道LeetCode系列 (一)题目 Given an array of integers, return indices of the two numbers such that they ad ...
- Oracle Global Finanicals Technical Reference(一)
Skip Headers Oracle Global Finanicals Oracle Global Financials Technical Reference Manual Release 11 ...
- VT控制码
VT100 是一个终端类型定义,VT100 控制码是用来在终端扩展显示的代码.比如果终端上任意坐标用 不同的颜色显示字符. 所有的控制符是 \033 打头(即 ESC 的 ASCII 码)用输出字符语 ...
- HBase行锁
1 行锁简介 在事务特性方面,hbase只支持单row的事务,不能保证跨row(cross-row)的事务.hbase通过行锁来实现单row事务.客户端进行操作时,可以显式对某一个行加锁,但是大部分情 ...
- Log4j.properties 配置详解
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...