重温《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提供六大组件,彼此可以组合 ...
随机推荐
- Guava 教程(3):Java 的函数式编程,通过 Google Collections 过滤和调用
原文出处: oschina 在本系列博客的第一.二部分,我介绍了非常优秀的Google Collections和Guava包.本篇博客中我们来看看如何使用Google Collections来做到过滤 ...
- 敏捷测试(4)--基于story的敏捷基础知识
基于story的敏捷基础知识----需求管理(一) 基于story进行需求管理 (1)使用story模式来管理需求,将庞大的MRD划分为一个个合适粒度,且可独立交付的story(通常每个story能在 ...
- 如何在Git中撤销一切 | 干货
翻译:李伟 审校:张帆 译自:Github JF杰微刊:如何在Git中撤销一切 任何一个版本控制系统中,最有用的特性之一莫过于 "撤销(undo)"操作.在Git中,"撤 ...
- javascript语法之with语句
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ISLR系列:(1)线性回归 Linear Regression
Linear Regression 此博文是 An Introduction to Statistical Learning with Applications in R 的系列读书笔记,作为本 ...
- 关于Android自定义view 你所需要知道的基本函数
开始时之前想吐槽一句..iphone的闹钟,12小时制.我成功的把闹钟订到了下午5:00 导致错过一班飞机.心疼改签费. 候机ing,没有事做,来写一下学习自定义view必须掌握的基本函数.这里只挑一 ...
- ORACLE 多表关联 UPDATE 语句
为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create table customers ( customer_id num ...
- mysql进阶(十二)常见错误汇总
原因:外键名不能重复
- 【一天一道LeetCode】#23. Merge k Sorted Lists
一天一道LeetCode系列 (一)题目 Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- Java-clone总结
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹 clone和Copy:当有一个对象Person p1=new Person("name" ...