STL源码剖析总结_第三章-迭代器与traits编程技法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.迭代器(iterators)概念与traits编程技法

STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后在以一贴胶着剂将它们撮合在一起。

3.1 迭代器设计思维——STL关键所在

STL中心思想:将数据容器和算法分开,彼此独立设计,最后再以已贴粘着剂将他们撮合在一起

3.2 迭代器是一种smart pointer

迭代器是一种行为类似指针的对象,指针的最常见最重要的是内容提领(取出指标所指物体的内容dereference)和成员访问(member access)。所以,迭代器最重要的编程工作是对operator *和operator->进行重载(overloading)工作。

auto_ptr 是一个用来包装原生指针的对象,内存漏洞问题可以借此解决。用法如下,和原生指针一模一样。

3.3 迭代器相应类别(associated types)

最常用的相应类别有五种

value type:迭代器所指对象的型别。

difference type :表示两个迭代器之间的距离,可用于表示容器的最大容量。pointer type:代表迭代器所指对象的指针类型。简言之,operator->()的返回类型。reference type:代表迭代器所指对象的引用类型。简言之,operator*()的返回类型。分为两种,不允许改变“所指对象之内容”者称为constant iterators,例如const int* pic,允许改变“所指对象之内容”者称为mutable iterators,例如int* pi。*pic/*pi的型别constant T&/T&就是reference type。

iterator category type:提出5种迭代器的类型标识。

使用函数模板的参数推导机制

推导的是参数,无法推导函数的返回值类型

3.4 traits编程技法——STL源代码门钥

1)参数类别推导技巧虽然可以用于value type,但非全面可用:value type 用于

函数的传回值

声明内嵌型别

关键词typename 的用意在于告诉编译器这是个型别

隐晦的陷阱:并不是所有的迭代器都是class type,如果不是class type 就无法为他定义内嵌类别

partial specialization(偏特化)的意义

2)Iterator category

Input Iterator:不允许外界改变。只读。

Output Iterator:唯写(write only)

Forward Iterator: 允许写入型算法(例如replace())在此种迭代器所形成的区间上进行读写操作。

Bidirectional Iterator:可双向移动。某些算法需要逆向走访某个迭代器区间(例如逆向拷贝某范围内的元素)

Random Access Iterator: 前四种迭代器都只供应一部分指针算术能力(前三种

支持operator++,第四种再加上operator--),第五种则涵盖所有指针的算术能

力,包括p+n,p-n,p1-p2,p1

注意:STL算法的一个命名规则:以算法所能接受的最低阶迭代器类型来为其迭代器型别参数命名

相关文档
最新文档