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才通过,为什么第二个测试没有通过。
尝试:
for(std::vector<int>::reverse_iterator i = arr.rbegin(); i != arr.rend(); ++i)
{
out.push_back(*i);
}
Run Code Online (Sandbox Code Playgroud)
迭代器已经为您提供了一个值,而不是向量的索引。