重温《STL源码剖析》笔记 第三章
源码之前,了无秘密。 --侯杰
第三章:迭代器概念与traits编程技法
迭代器是一种smart pointer
auto_Ptr 是一个用来包装原生指针(native pointer)的对象,声明狼藉的内存泄漏问题可藉此获得解决。
auto_ptr用法如下,和原生指针一模一样:
void func() {
auto_ptr<string> ps(new string("jjhou"));
cout << *ps << endl; //输出:jjhou
cout << ps->size() <<endl; //输出:5
//离开前不需delete, auto_ptr会自动释放内存
函数第一行的意思是,以算式new动态配置一个初值为“jjhou”的string对象,并将所得结果(一个原生指针)
作为auto_ptr<string>对象的初值
template partial specialization
凡原生指针都没有能力定义自己的相应型别
iterator_traits(特性萃取机) 通过class template partial specialization的作用,不论是原生指针或
class-type iterators,都可以让外界方便地取其相应型别。
最常用到的迭代器相应型别有五种:value type, difference type, pointer type, reference type,
iterator catagoly
template<class I>
struct iterator_traits {
//需要typename标识的目的是告诉编译器这表示一个类型
typedef typename I::iterator_category iterator_category;
typedef typename I::value_type value_type;
typedef typename I::difference_type difference_type;
typedef typename I::pointer pointer;
typedef typename I::reference reference;
};
根据移动特性与施行操作,迭代器被分为五类:
Input Iterator:不允许外界改变。只读。
Output Iterator:唯写(write only)
Forward Iterator: 允许写入型算法(例如replace())在此种迭代器所形成的区间上进行读写操作。
Bidirectional Iterator:可双向移动。某些算法需要逆向走访某个迭代器区间
(例如逆向拷贝某范围内的元素)
Random Access Iterator: 前四种迭代器都只供应一部分指针算术能力(前三种支持operator++,
第四种再加上operator--),第五种则涵盖所有
指针的算术能力,包括p+n,p-n,p1-p2,p1<p2
这一章的详细内容请看园子里的另外一篇博客: STL源码学习----迭代器及其适配器
重温《STL源码剖析》笔记 第三章的更多相关文章
- 《STL源码剖析》——第四章、序列容器
1.容器的概观与分类 所谓序列式容器,其中的元素都可序(ordered)[比如可以使用sort进行排序],但未必有序(sorted).C++语言本身提供了一个序列式容器array,STL另外再提供v ...
- STL源码剖析读书笔记之vector
STL源码剖析读书笔记之vector 1.vector概述 vector是一种序列式容器,我的理解是vector就像数组.但是数组有一个很大的问题就是当我们分配 一个一定大小的数组的时候,起初也许我们 ...
- 面试题总结(三)、《STL源码剖析》相关面试题总结
声明:本文主要探讨与STL实现相关的面试题,主要参考侯捷的<STL源码剖析>,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助 ...
- STL源码剖析 迭代器(iterator)概念与编程技法(三)
1 STL迭代器原理 1.1 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型,STL设计的精髓在于,把容器(Containers)和算法(Algorithms)分开,而迭代器(i ...
- 《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源码剖析读书总结1——GP和内存管理
读完侯捷先生的<STL源码剖析>,感觉真如他本人所说的"庖丁解牛,恢恢乎游刃有余",STL底层的实现一览无余,给人一种自己的C++水平又提升了一个level的幻觉,呵呵 ...
- 《STL源码剖析》相关面试题总结
原文链接:http://www.cnblogs.com/raichen/p/5817158.html 一.STL简介 STL提供六大组件,彼此可以组合套用: 容器容器就是各种数据结构,我就不多说,看看 ...
- STL源码剖析之序列式容器
最近由于找工作需要,准备深入学习一下STL源码,我看的是侯捷所著的<STL源码剖析>.之所以看这本书主要是由于我过去曾经接触过一些台湾人,我一直觉得台湾人非常不错(这里不涉及任何政治,仅限 ...
随机推荐
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十)
打开Arm.h,在其接口中添加一个新方法: -(void)armShoot; 接下来在Arm.m中实现该方法: -(void)armShoot{ CGPoint startPoint = [self ...
- Touch Handling in Cocos2D 3.x(三)
取得触摸位置 最有趣的部分是触摸的位置.接下来我们将使用触摸位置在玩家每次点击的屏幕位置上添加精灵.为了完成这项功能我们需要修改touchBegan的实现,替换旧的代码如下: - (void)touc ...
- [Django高级]理解django中的中间件机制和执行顺序
原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...
- 如何在Git中撤销一切 | 干货
翻译:李伟 审校:张帆 译自:Github JF杰微刊:如何在Git中撤销一切 任何一个版本控制系统中,最有用的特性之一莫过于 "撤销(undo)"操作.在Git中,"撤 ...
- 二叉树的最大深度算法面试题-leetcode学习之旅(3)
标题 Maximum Depth of Binary Tree 描述 The maximum depth is the number of nodes along the longest path f ...
- Material Design之CardView的使用
本文介绍CardView这个控件的使用,CardView继承至FrameLayout类,是support-v7包下的一个类,使用时必须引入cardview依赖包,可在下载的sdk文件夹中找到... 使 ...
- 主流列式数据库评测:InfiniDB
).本文测试的InfiniDB版本是2010年12月20日发布的2.02版,下载文件名分别为InfiniDB64-2.0.2-2.exe 和InfiniDB64-ent-2.0.2-2.exe.安装文 ...
- netty深入学习之一: 入门篇
netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...
- Linux进程管理(第二版) --进程管理命令
进程管理命令 一.查看用户信息.5.15 分钟内的系统的,优先值越小,优先权越大 ] 1.nice 指定程序运行的优先级 格式 nice -n command 例如 nice -5 myprogrem ...
- Database Initialization Parameters for Oracle E-Business Suite Release 12
In This Document Section 1: Common Database Initialization Parameters For All Releases Section 2: Re ...