码迷,mamicode.com
首页 > 其他好文 > 详细

重温《STL源码剖析》笔记 第三章

时间:2014-09-02 22:34:25      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   ar   for   art   

第三章:迭代器概念与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源码剖析》笔记 第三章

标签:style   blog   http   color   os   io   ar   for   art   

原文地址:http://www.cnblogs.com/xxiaoye/p/3952288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!