使用reverse_iterator反转数组(向量)

Dri*_*ans 1 c++ iterator vector c++17

我正在尝试使用Edabit挑战并测试“新”功能来提高我的c ++知识。当前的挑战是希望我们编写一个函数来反转数组。例子:

reverse([1, 2, 3, 4]) ? [4, 3, 2, 1]

reverse([9, 9, 2, 3, 4]) ? [4, 3, 2, 9, 9]

reverse([]) ? []
Run Code Online (Sandbox Code Playgroud)

我尝试使用reverse_iterator进行此操作,但结果有些奇怪。

reverse([1, 2, 3, 4]) ? [4, 3, 2, 1]

reverse([9, 9, 2, 3, 4]) ? [4, 3, 2, 9, 9]

reverse([]) ? []
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

FAILED: Expected: equal to [ 4, 3, 2, 1 ]
Actual: [ 0, 4, 3, 2 ]
Run Code Online (Sandbox Code Playgroud)

首先,看起来好像只有一次,o我在rbegin()中加了1并撕成如下:

for(std::vector<int>::reverse_iterator i = arr.rbegin() + 1; i != arr.rend() + 1; ++i)

Run Code Online (Sandbox Code Playgroud)

似乎第一个测试通过了,但是随后的测试似乎还很遥远:

FAILED: Expected: equal to [ 7, 6, 5 ]
Actual: [ 33, 0, 5 ]
Run Code Online (Sandbox Code Playgroud)

我试图了解此反向迭代器的工作原理,因此请提供解决方案,并提供清晰的解释,说明为什么第一个测试加上1才通过,为什么第二个测试没有通过。

Rad*_*ski 7

尝试:

for(std::vector<int>::reverse_iterator i = arr.rbegin(); i != arr.rend(); ++i)
{
    out.push_back(*i);
}
Run Code Online (Sandbox Code Playgroud)

迭代器已经为您提供了一个值,而不是向量的索引。