重温《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提供六大组件,彼此可以组合 ...
随机推荐
- 深入 JAVA里面关于byte数组和String之间的转换问题
把byte转化成string,必须经过编码. 例如下面一个例子: importjava.io.UnsupportedEncodingException; publicclass test{ pub ...
- 【翻译】在Ext JS集成第三方库
原文地址:http://www.sencha.com/blog/integrating-ext-js-with-3rd-party-libraries/ 作者:Kevin Kazmierczak Ke ...
- 浅析数据结构中栈与C实现
最近在搞摄像头驱动,o()︿︶)o 唉,别提有多烦,一堆寄存器就有人受的了--特么这不是单片机的开发,这是内核驱动开发-- 今天放松一下,我们来看看数据结构中的栈,这节的知识点可以说是数据结构中最容易 ...
- LeetCode之“链表”:在O(1)时间删除链表节点
下边讨论暂不包括尾节点. 一般来说,我们要删除链表中的一个节点是需要知道其上一节点的.但我们真的需要吗? 其实我们可以将待删节点的下一节点的值和指向的下一节点赋予待删节点,然后删除待删节点的下一节点. ...
- Linux常用命令(第二版) --文件搜索命令
文件搜索命令 1.which /usr/bin/which #显示系统命令所在目录,绝对目录,不能查找文件 格式:which [系统命令] e.g. which ls 附-whereis:也可以查找到 ...
- 用C语言将一个数开根号后再取倒数的方法
在上学的时候,曾经看过有人写过这样的算法,就是将一个数开根号后再取倒数的算法,我本人也觉得十分巧妙,于是就将它积累了下来,让我们来看看是怎么回事: #include <stdio.h> # ...
- Android高通平台调试Camera驱动全纪录
项目比较紧,3周内把一个带有外置ISP,MIPI数据通信,800万像素的camera从无驱动到实现客户全部需求. 1日 搭平台,建环境,编译内核,烧写代码. 我是一直在Window下搭个虚拟机登服务器 ...
- 数据结构---栈C语言实现
#include <stdio.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned ...
- Jenkins hash
最早,Bob Jenkins提出了多个基于字符串通用Hash算法(搜Jenkins Hash就知道了),而Thomas Wang在Jenkins的基础上,针对固定整数输入做了相应的Hash算法.其64 ...
- The 1st tip of DB Query Analyzer
The 1st tip of DB Query Analyzer Ma Genfeng (Guangdong Unitoll Services incorporate ...