首页 技术 正文
技术 2022年11月19日
0 收藏 992 点赞 4,172 浏览 1535 个字

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

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

第一章: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。

  图形如下:重温《STL源码剖析》笔记 第一章

  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; //
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,816
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,899