STL源码剖析

为了建立数据结构和算法的一套标准,并且降低其间的耦合关系以提升各自的独立性、弹性、交互操作性,C++社区诞生了STL。
STL的价值在于两方面,就低层次而言,STL带给我们一套极具实用价值的零部件,以及一个整合的组织。这种价值就像MFC或VCL之于Windows软件开发过程所带来的价值一样,直接而明朗,令大多数人有最立即明显的感受。除此之外,STL还带给我们一个高层次的、以泛型思维为基础的、系统化的、条理分明的“软件组件分类学”。

c++config.h环境组态文件,针对不同的编绎器以及不同的版本进行常量设定。

临时对象的产生与运用
临时对象是一种无名对象,它的出现不在程序员的预期之内(例pass by value操作都会引发copy操作,于是形成一个临时对象)。
有时刻意制造临时对象可使程序干净清爽,方法为在类型名称后直接加一对小括号,括号内指定初值。例int(8),其意义相当于调用相应的构造函数且不指定对象名称。
STL最常将此技巧应用于仿函数(functor)与算法的搭配上。

静态常量整数成员在class内部直接初始化
如果class内含const static integral data member,根据C++标准规格,可以在class内部直接给予初值。integral泛指所有整数类型,不单指int。

increment/decrement/dereference操作符
任何迭代器都必须出现前进(increment)和取值(dereference)功能,前进还分为前置式和后置式两种。
同时有些迭代器具备双向移动功能,则必须提供decrement操作符,区分前置和后置。

前闭后开区间表示法[ )
STL算法需要获得一对迭代器(泛型指针)标示的区间,用以表示操作范围。这对迭代器标示的是个前闭后开区间,以[first, last)表示。

function call操作符(operator())
函数调用操作符被重载,STL算法一般提供两个版本,一个用于一般状态(例排序时递增方式排列),一个用于特殊状况(例排序时由使用者指定以何种特殊关系排列)。
需要用户指定条件或策略时,实际背后由一整组操作构成,此时使用函数可代表这一整组操作。
函数当做参数传递时函数名转换为函数指针,函数指针无法保持自己的局部状态,也无法达到组件技术中的可适配性。
因些STL算法的特殊版本在接受条件或策略等一整组操作时,以仿函数形式呈现。
仿函数即使用起来像函数,针对某个class进行operator()重载,即成为一个仿函数。至于成为一个可配接的仿函数,后续详解。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值