我正在写一个iterator
(实际上是const_iterator
对于我当前的对象,我还想创建一个reverse_const_iterator
also.
我环顾四周,想看看如何做到这一点,然后我偶然发现this http://www.cplusplus.com/reference/iterator/reverse_iterator/:
但请注意,当迭代器反转时,反转的版本
不指向范围内的同一个元素,而是指向第一个
在它之前。之所以如此,是为了安排过去的结局
范围的元素:指向范围内最后一个元素的迭代器
范围在反转时会更改为指向最后一个元素(不是
过去)的范围(这将是范围的第一个元素,如果
颠倒)。如果范围中第一个元素的迭代器是
反转,反转迭代器指向第一个迭代器之前的元素
元素(这将是范围的最后元素,如果
颠倒)。
从用户的角度来看,或者当您取消引用 a 时,会发生这种情况吗?reverse_iterator
它不是通过为您提供对象的值/引用来抽象化这一点吗?think它指的是?这只是实施细节吗?
我的理解是:
for(i = obj.rbegin(); i != obj.rend(); i++)
相当于
for(i = obj.begin(); i != obj.end(); i++)
除非相反。所以*i
在第一种情况下将向后穿过容器,在第二种情况下将向前穿过容器。我的直觉正确吗?
你说得对,这是一个抽象。反向迭代器包含一个普通迭代器,该迭代器指向取消引用该对象后将获得的对象后面的元素。然而,这不仅仅是一个实现细节。这std::reverse_iterator
适配器提供成员函数调用base
它返回底层迭代器。
该标准定义了std::reverse_iterator
作为迭代器适配器,与其适配的迭代器具有以下关系:
反向迭代器与其对应的迭代器 i 之间的基本关系由以下恒等式建立:&*(reverse_iterator(i)) == &*(i - 1)
常见用途为base
正在从容器中删除一个元素,具体操作如下:
it++;
lst.erase(it.base());
如果您想在反向迭代容器时执行此操作,您可以这样做:
it++;
std::list<int>::reverse_iterator(lst.erase(it.base()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)