Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++;作品 C++,我想知道操作符+ +如何向后移动迭代器。据我所知,iterator.begin()和iterator.end()分别返回指向第一个索引和最后一个索引的指针 vector<int>::iterator it = myvector.begin(); vector::iterator it=myvector.begin();_C++_Stl_Iterator - Fatal编程技术网

如何在C++;作品 C++,我想知道操作符+ +如何向后移动迭代器。据我所知,iterator.begin()和iterator.end()分别返回指向第一个索引和最后一个索引的指针 vector<int>::iterator it = myvector.begin(); vector::iterator it=myvector.begin();

如何在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

当我们做it++时,它将移动到下一个索引。这对我来说很清楚,但我完全混淆了反向迭代器

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