[4 迭代器] 26. iterator优先于const_iterator、reverse_iterator以及const_reverse_iterator

STL标准容器提供了4种不同的迭代器:iterator、const_iterator、reverse_iterator和const_reverse_iterator。

对容器类container<T>来说,iterator类型相当于T*,而const_iterator相当于const T*。reverse_iterator与const_reverse_iterator同样对应于T*和const T*,对这两个迭代器进行递增的效果是由容器尾部反向遍历到容器头部。

先看两点说明。

1 vector<T>容器中insert和erase函数原型:

iterator insert(iterator position, const T& x);
iterator erase(iterator position);
iterator erase(iterator rangeBegin, iterator rangeEnd);

每个标准容器都提供了类似的函数,只不过对于不同的容器,返回值有所不同。

注意:这些函数仅接受iterator类型的参数。

2 下图清晰地表明了不同类型的迭代器之间的转换关系:

todo

(1)从iterator到const iterator,或从iterator到reverse_iterator,或从reverse_iterator到const_reverse_iterator之间都存在隐式转换。

(2)通过调用reverse_iterator的base成员函数,可以将reverse_iterator转换为iterator。类似地,通过调用const_reverse_iterator的base成员函数,可以将const_reverse_iterator转换为const_iterator。

注意:通过base()得到的迭代器可能不是你所期望的迭代器。(见28条)

(3)图中没有办法从const_iterator转换到iterator,也无法从const_reverse_iterator转换到reverse_iterator。

总结应尽可能使用iterator的原因:

1 有些版本的insert和erase要求使用interator。

2 隐式地将一个const_iterator转换为iterator是不行的,27条将const_iterator转换为iterator的技术并不普遍适用。

3 从reverse_iterator转换来的iterator在使用之前可能需要相应的调整。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值