源码之前,了无秘密。 --侯杰
第三章:迭代器概念与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源码剖析>.之所以看这本书主要是由于我过去曾经接触过一些*人,我一直觉得*人非常不错(这里不涉及任何政治,仅限 ...
随机推荐
-
roleManager与角色管理授权
总览地址 https://msdn.microsoft.com/zh-cn/library/9ab2fxh0.aspx 其中基本概述是第一篇:了解角色管理 来自 <https://msdn.mi ...
-
CSS控制文字,超出部分显示省略号
http://www.daqianduan.com/6179.html <p style="width: 300px;overflow: hidden;white-space: now ...
-
CentOS中查看物理CPU信息的方法
1.概念 [1]物理CPU:实际Server中插槽上的CPU个数.物理cpu数量:可以数不重复的 physical id 有几个.[2]逻辑CPULinux用户对 /proc/cpuinfo 这个文件 ...
-
C# WebBrowser准确判断网页最终装载完毕
== 最近写了个软件叫WebAutoScript,目的用于,网页的自动操作处理,就是说,所有你在网页上面的操作,都可以录到一个脚本中,然后可以回放这个操作过程..我是说任何过程. 程序是用C#写的,其 ...
-
九度OJ 1480 最大上升子序列和 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1480 题目描述: 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列 ...
-
MYSQL的binary解决mysql数据大小写敏感问题 《转载》
BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写如下:mysql> select binary 'ABCD'='abcd ...
-
EC读书笔记系列之15:条款32、33、34
条款32 确保你的public继承塑模出is-a关系 记住: ★public继承意味着is-a.适用于base class身上的每一件事情一定也适用于derived class身上,∵每一个deriv ...
-
FTP方式部署Azure Web App
创建部署凭据 在仪表盘中创建或重置部署凭据,在凭据中设置用户名和密码. 通过FTP方式打开Web根目录 在本地资源管理器中打开FTP地址(例如:ftp://cnws-prod-sha-001.ftp. ...
-
Nginx 文件下载 apk 文件下载不了
通过nginx 做下载服务器 下载 apk 安装包, 出现错误502和 499. 解决办法在 nginx的 mime.types 中 来自为知笔记(Wiz)
-
java.io.UTFDataFormatException: encoded string too long:
java.io.UTFDataFormatException: encoded string too long: 259553 bytes 按如下修改可避开此问题. - output.writeUTF ...