标准容器类提供的四种迭代器类型

四种类型分别为:iterator、const_iterator、reverse_iterator、const_reverse_iterator


对于container<T>而言,iterator的作用相当于T*,而const_iterator则相当于const T*(你可能也见过T const*这样的写法:)。增加一个iterator或者const_iterator可以在一个从容器开头趋向尾部的遍历中让你移动到容器的下一个元素。reverse_iterator与const_reverse_iterator同样相当于对应的T*和const T*,所不同的是,增reverse_iterator或者const_reverse_iterator会在从尾到头的遍历中让你移动到容器的下一个元素。


图中显示了从iterator到const_iterator、从iterator到reverse_iterator和从reverse_iterator到const_reverse_iterator可以进行隐式转换。并且,reverse_iterator可以通过调用其base成员函数转换为iterator。const_reverse_iterator也可以类似地通过base转换成为const_iterator。一个图中无法显示的事实是:通过base得到的也许并非你所期待的
iterator。


你应该发现了没有办法从一个const_iterator转换得到一个iterator,也无法从const_reverse_iterator得到reverse_iterator。这一点非常重要,因为这意味着如果你有一个const_iterator或者const_reverse_iterator,你会发现很难让它们和容器的一些成员函数合作。那些成员函数要求iterator,而你无法从const迭代器类型反过来得到iterator。当你需要指出插入位置或删除的元素时,const迭代器几乎没有用。


千万不要傻乎乎的宣称const迭代器一无是处。不,它们可以与算法默契配合,因为算法通常并不关心迭代器是什么类型,只要是适当的种类就可以了,很多容器的成员方法也接受const迭代器。只有insert和erase的一些形式有些吹毛求疵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值