c++ - 使用 reverse_iterator 反转数组( vector )

标签 c++ vector iterator c++17

我正在尝试使用 Edabit 挑战和测试"new"功能来提高我的 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 而第二个测试没有通过。

最佳答案

尝试:

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

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

关于c++ - 使用 reverse_iterator 反转数组( vector ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56635733/

相关文章:

c++ - C++中如何知道指针指向的对象类型?

c++ - Unicode、字符指针和 wcslen

c++ - 根据额外参数对 vector 进行排序

java - ListIterator 或 Iterator 不会在 List 末尾停止

c++ - 在集合中找到一对 C++

java - 非常困难的 XML -> JSON 按顺序解析 3 个数组,然后回到第一个数组循环另一个数组

c++ - 使用 if else 将数字转换为单词

c++ - 将 gcc 可执行文件与 Visual C++ 库链接是否安全?

java - 如何初始化 org.apache.commons.math3.geometry.Vector?

vector 的 C++ 引用