源码之前,了无秘密。 --侯杰

经典的书,确实每看一遍都能重新收获一遍:

第一章: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源码剖析》笔记 第一章的更多相关文章

  1. 《STL源码剖析》——第一、二、三章

     第一章:概论: 换句话说,STL所实现的,是依据泛型思维架设起来的一个概念结构.这个以抽象概念(abstract concepts)为主体而非以实际类(classes)为主体的结构,形成了一个严谨的 ...

  2. Stl源码剖析 第三章 iterator摘要

    1. Stl的设计思想是: 将数据容器和算法分开,彼此独立设计,最后再以一贴胶合剂将它们撮合在一起,这个胶合剂就是迭代器. 2. 从3.2节迭代器的实现可知,如果要设计一个与容器分离实现的迭代器,会暴 ...

  3. STL源码剖析读书笔记之vector

    STL源码剖析读书笔记之vector 1.vector概述 vector是一种序列式容器,我的理解是vector就像数组.但是数组有一个很大的问题就是当我们分配 一个一定大小的数组的时候,起初也许我们 ...

  4. 《STL源码剖析》读书笔记

    转载:https://www.cnblogs.com/xiaoyi115/p/3721922.html 直接逼入正题. Standard Template Library简称STL.STL可分为容器( ...

  5. 通读《STL源码剖析》之后的一点读书笔记

    直接逼入正题. Standard Template Library简称STL.STL可分为容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adap ...

  6. c++ stl源码剖析学习笔记(一)uninitialized_copy()函数

    template <class InputIterator, class ForwardIterator>inline ForwardIterator uninitialized_copy ...

  7. 《STL源码剖析》环境配置

    首先,去侯捷网站下载相关文档:http://jjhou.boolan.com/jjwbooks-tass.htm. 这本书采用的是Cygnus C++ 2.91 for windows.下载地址:ht ...

  8. 面试题总结(三)、《STL源码剖析》相关面试题总结

    声明:本文主要探讨与STL实现相关的面试题,主要参考侯捷的<STL源码剖析>,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助 ...

  9. 【STL 源码剖析】浅谈 STL 迭代器与 traits 编程技法

    大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub : https://github.com/rongweihe/Mor ...

  10. STL"源码"剖析-重点知识总结

    STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合 ...

随机推荐

  1. Android利用ViewPager仿微信主界面-android学习之旅(78)

    首先是介绍ViewPager这个控件 ,这个控件需要pagerAdapter作为容器来提供数据,同时pagerAdapter的数据源是View数组 效果图如下 部分代码如下,实现如下的方法 mPage ...

  2. EBS 可拓展的外部信用风险导入

    DECLARE l_msg_count NUMBER; l_msg_data VARCHAR2(2000); l_return_status VARCHAR2(30); l_cc_hold_comme ...

  3. 2013 HTML5中国峰会演讲:Android上的HTML5:过去,现在和将来

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 会议链接(应用和工具专场) http://2013.html5dw.com/main, 2013年8月10日 ...

  4. 高通android开发摘要

    一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...

  5. 基于ROS_Arduino室内移动机器人SLAM实验测试

    纯手工搭建的机器人,因此外观并不美. 基于ROS(indigo)以及Arduino等搭建软硬件平台,包括语音.视觉.激光.码盘等传感器设备. 整体如下图所示: 底盘特写: 语音输入: Arduino模 ...

  6. 新书《Ext JS 4.2实战》即将出版

    目录: 第1章    Ext JS 4概述1.1    从Ext JS 4.0到4.071.2    从4.1到4.1.1a1.3    从4.2到4.2.11.4    如何选择版本1.5    基 ...

  7. 重装Windows后修复Linux引导

    装了双系统(Windows和Linux)的机器重新安装Windows后会导致Linux的引导丢失而无法进入原先的Linux系统[其原因是Windows会覆盖原先MBR中的Linux的BootLoade ...

  8. Unix/Linux中的read和write函数

    文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符.当读或写一个文件时,使用open或creat ...

  9. OpenCV 求外接矩形以及旋转角度

    程序没有写完整,大概功能就是实现了,希望大家分享学习,把他改对 // FindRotation-angle.cpp : 定义控制台应用程序的入口点. // // findContours.cpp : ...

  10. RubyGem默认源安装太慢,修改国内淘宝源

    原帖地址:http://www.hiceon.com/topic/Ruby-Gem-install-source-taobao/ WHY? 由于国内网络原因(你懂的),导致 rubygems.org ...