如何在C++;作品 C++,我想知道操作符+ +如何向后移动迭代器。据我所知,iterator.begin()和iterator.end()分别返回指向第一个索引和最后一个索引的指针 vector<int>::iterator it = myvector.begin(); vector::iterator it=myvector.begin();
当我们做it++时,它将移动到下一个索引。这对我来说很清楚,但我完全混淆了反向迭代器如何在C++;作品 C++,我想知道操作符+ +如何向后移动迭代器。据我所知,iterator.begin()和iterator.end()分别返回指向第一个索引和最后一个索引的指针 vector<int>::iterator it = myvector.begin(); vector::iterator it=myvector.begin();,c++,stl,iterator,C++,Stl,Iterator,当我们做it++时,它将移动到下一个索引。这对我来说很清楚,但我完全混淆了反向迭代器 vector<int>::reverse_iterator rit = myvector.rbegin(); vector::reverse_迭代器rit=myvector.rbegin(); 当我们执行rit++时,它将向后移动。我想知道在使用反向迭代器的情况下是如何实现的。是运算符重载还是什么我不知道的。请给我正确的方法来理解这些事情 请提供更多详细信息。是的,这是运算符重载。当您执行rit
vector<int>::reverse_iterator rit = myvector.rbegin();
vector::reverse_迭代器rit=myvector.rbegin();
当我们执行rit++时,它将向后移动。我想知道在使用反向迭代器的情况下是如何实现的。是运算符重载还是什么我不知道的。请给我正确的方法来理解这些事情
请提供更多详细信息。是的,这是运算符重载。当您执行
rit++
时,编译器会在内部转换该操作
rit.operator++(0);
这里,operator++
是反向迭代器类的一个方法,它知道如何移动迭代器。需要使用伪整数参数。是的,有一个重载会“向后”从最后一个元素前进到开始之前的一个元素
该行为相当于(cppreference上的页面可能包含另一个可能的实现)
请注意,具体实现方式可能因实现而异。只要您遵守标准要求,您就有一定的自由度。当您执行
it++
或rit++
时,它们实际上并不是指“在集合中向前或向后移动”,而是指“移动到要迭代的下一个元素”
如果使用begin()
如果使用rbegin()
,则表示“我想向后迭代”,因此rit++
会向后移动
正如我所知,iterator.begin()
和iterator.end()
分别返回指向第一个索引和最后一个索引的指针
vector<int>::iterator it = myvector.begin();
接近,但不一定:
- 它们返回的是迭代器,而不是指针
end()
在内部,向量
迭代器
通常存储指针,迭代器
上的++
或--
通过转发重载操作符对指针执行相应的++
或--
对于反向迭代器,重载的运算符+++
只对指针执行--
,反之亦然。例如,我的计算机上的VisualC++库在类yRavrime RealSyIsRealths<代码>:
_Myt& operator++()
{
--current;
return (*this);
}
_Myt operator++(int)
{
_Myt _Tmp = *this;
--current;
return (_Tmp);
}
反向迭代器r和由其构成的迭代器i之间的关系为:
&*r == &*(i-1)
如果end是序列中超过end元素的元素,则反向序列中的第一个元素指向*(end–1)_***************_
^开始++-->^结束
^rend这里有一个很好的解释:。感谢提供的链接。它澄清了这个概念。你能给我一个链接吗?这个链接将清楚地显示反向计数器运算符++功能的实现。也许一些解释会使这个响应更好!如果我添加一些解释,我将复制其他答案。我只是觉得在这种情况下,一张图片比百分之一百个单词更好。
_***************_
^begin ++---> ^end
^rend <---++ ^rbegin