[C++学习]迭代器iterator总结

描述

迭代器类似于指针类型,迭代器也提供了对对象的间接访问。就迭代器而言,其对象是vector或者string中的元素或者字符。使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素。迭代器也有有效和无效之分,有效迭代器指向某个元素或者指向容器中尾元素的下一个位置,其余情况均为无效元素。

使用

auto b = v.begin(); // v的第一个元素
auto e = v.end(); // v的尾元素的下一个位置

end负责返回指向容器或string对象的尾元素的下一个位置,也就是说,该迭代器指示的是一个不存在的元素,该迭代器只是一个标记,没有实际含义,表示已经处理完了容器的所有元素,end成员返回的迭代器常被称作为尾后迭代器

1. 迭代器运算符
运算符描述
*iter返回迭代器iter所知元素的引用
iter->member解引用iter所指元素的名为member的成员,等价于(*iter).member
++iter令iter指向容器的下一个元素
--iter令iter指向容器的上一个元素
iter1 == iter2 / iter1 != iter2判断两个迭代器是否相等

举例:

string s("hello world!");
for (auto iter = s.begin(); iter != s.end(); ++iter)
{
    cout << *iter << endl;
}
2. 迭代器的类型

那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器类型:

vector<int>::iterator iter1;
string::iterator iter2;

vector<int>::const_iterator iter3;
string::const_iterator iter4;

上面两种迭代器类型的区别在于iterator能够读写,而const_iterator只能读。vector对象或string为常量时只能用const_iterator。

3. 解引用与成员访问

解引用可获得迭代器所指的对象,如果该对象恰好为类,就可能进一步访问它的成员。

例如,检查由string组成的vector对象需要检查其是否有元素值为空:

(*iter).empty(); // 正确写法
*iter.empty(); // 错误写法,iter是一个迭代器没有名为empty的成员
4. 无效的迭代器

此时使用迭代器会使迭代器无效:

  • 在for循环中向vector对象中添加元素;
  • 任何一种可能改变vector对象容量的操作;

但凡使用了迭代器的循环体,都不能向等待其所属的容器添加元素!!

5. 迭代器的运算
运算描 述
iter + n迭代器加上一个整数得到的仍然是迭代器,结果迭代器比原迭代器向前移动了若干元素。结果迭代器或者指向容器内的一个元素,或者指向容器内尾元素的下一个位置
iter - n迭代器减去一个整数得到的仍然是迭代器,结果迭代器比原迭代器向后移动了若干元素。结果迭代器或者指向容器内的一个元素,或者指向容器内尾元素的下一个位置
iter += n 或 iter -= niter加/减法的复合赋值语句
iter1 - iter2两个迭代器相减得到的是它们之间的距离,参与运算的迭代器必须指向相同的容器的元素或者尾元素的下一个位置。
>、>=、<、<=迭代器关系运算符,参与运算的迭代器必须指向相同的容器的元素或者尾元素的下一个位置。

转载于:https://www.cnblogs.com/linzijie1998/p/11544376.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值