迭代器iterator的一点总结

iterator

在回顾使用string和vector容器的时候,用到了iterator(迭代器),这里把一些容易忽略的要点总结如下:


为什么要用迭代器啊?直接采用下标运算符[ ]不可以吗?

首先要明确一点,iterator是提供对对象的间接访问的,类似于指针的作用。

它们适用范围不同

iterator对于任何容器都是使用的,而[ ]下标运算符只对于string和vector这种存储在连续的内存空间上的容器有效,对于像list、forward_list等容器则不适用。

因此,最好在所有场合下使用iterator,而不是[ ]!!!


iterator运算符(适用于所有容器
  1. iter->mem
  2. *iter
  3. ++iter
  4. –iter (forward_list 不支持递减操作,因为是单向链表)
  5. iter1==iter2
  6. iter1 != iter2
特有的运算符(string和vector独有,因此它们在内存空间中是连续的)
  1. iter+n
  2. iter - n
  3. iter += n
  4. iter -=n
  5. iter1 - iter2
  6. > 、 >= 、 < 、<=

iterator的类型

无须知道它的确切类型,使用iterator和const_iterator来表示iterator的类型
eg:
vector < int > ::iterator it1;
string::iterator it2;
vector < int > ::const_iterator it3;
string::const_iterator it4;

在使用的时候,也可以使用auto表示它们的类型;

for(auto it=v.begin();it != v.end();++it)
{
    cout<<*it<<endl;
}

iterator的范围

由一对迭代器表示,分别为begin和end;
begin:指向容器中的首元素
end:指向容器中尾元素的下一个位置

是一个左闭右开的区间,[ begin,end ),end指向的元素不在范围内
它的好处在于
判断范围为空时:只需要判断begin != end 就行了,一般用在循环体的结束条件


iterator的成员——begin和end

begin和end返回的都是iterator类型

cbegin和cend返回的是const_iterator类型,不可以修改迭代器指向的内容

需要注意的是:可以将一个普通的iterator类型转换成const_iterator类型,反之则不行。权限只能变小,而不能变大。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值