c++ STL 迭代器机制

先说明一些简单的知识

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值