您的位置:首页 > 编程语言 > C语言/C++

c++ STL 迭代器机制

2013-07-05 19:29 330 查看
先说明一些简单的知识

(1) 每种容器类型都定义了自己的迭代器类型,如vector:

vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是vector<int>::iterator。为什么会有这样奇怪的定义呢?那是因为iterator是vector的一个public内部class,另外::是“域操作符”

(2) 使用迭代器读取vector中的每一个元素:

vector<int> ivec(10,1);

    for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)

    {

        *iter=2;      //使用 * 访问迭代器所指向的元素

    }

const_iterator:

只能读取容器中的元素,而不能修改。

for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)

    {

        cout<<*citer;

        //*citer=3;   error

    }

vector<int>::const_iterator 和 const vector<int>::iterator的区别

const vector<int>::iterator newiter=ivec.begin();

    //*newiter=11;   /不/可以修改指向容器的元素

    newiter++;     //迭代器本身能被修改

(3) iterator的算术操作:

iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.

    const vector<int>::iterator newiter=ivec.begin();

    vector<int>::iterator newiter2=ivec.end();

    cout<<"\n"<<newiter2-newiter;

内部机制:

list的内部代码类似如下:

template <class Node>

class List{

 Node* head;

 class iterator{

  Node* ptr;

 public:

  iterator(Node* p=0):ptr(p){}

  Node operator*()const{return *ptr;}

  iterator& operator++(){ptr=ptr->next; return *this;}

  iterator operator++(int)

  {iterator tmp=*this ; ++*this; return tmp;}

  bool operator==(const iterator&i)const{return ptr==i.ptr;}

  bool operator!=(const iterator&i)const{return ptr!=i.ptr;}

 };

 iterator begin(){return iterator(head);}

 iterator end(){return iterator();}

 ……

};

1、摘自C++ STL 迭代器机制剖析

2、摘自C++ typedef用法小结 (※不能不看※):http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ STL