【发布时间】:2019-06-17 16:53:24
【问题描述】:
我正在尝试通过 Edabit 挑战和测试“新”功能来提高我的 C++ 知识。当前的挑战希望我们编写一个函数来反转数组。 例子:
reverse([1, 2, 3, 4]) ➞ [4, 3, 2, 1]
reverse([9, 9, 2, 3, 4]) ➞ [4, 3, 2, 9, 9]
reverse([]) ➞ []
我尝试使用 reverse_iterator 执行此操作,但结果有些奇怪。
std::vector<int> reverse(std::vector<int> arr) {
std::vector<int> out;
for(std::vector<int>::reverse_iterator i = arr.rbegin(); i != arr.rend(); ++i)
{
out.push_back(arr[*i]);
}
return out;
}
我得到的结果如下:
FAILED: Expected: equal to [ 4, 3, 2, 1 ]
Actual: [ 0, 4, 3, 2 ]
首先它似乎只是一次,o 我用 rbegin() 加了 1 并如下所示:
for(std::vector<int>::reverse_iterator i = arr.rbegin() + 1; i != arr.rend() + 1; ++i)
第一个测试似乎通过了,但接下来的测试似乎还差得很远:
FAILED: Expected: equal to [ 7, 6, 5 ]
Actual: [ 33, 0, 5 ]
我试图了解这个反向迭代器是如何工作的,所以请提供一个解决方案和一些清晰的解释,为什么第一个测试通过添加 1 以及为什么第二个没有通过。
【问题讨论】:
-
你可以简单地使用
return std::vector<int>(arr.rbegin(), arr.rend());的1行解决方案