Я пытаюсь улучшить свои знания c ++, используя вызовы Edabit и тестируя «новые» функции.Текущий вызов хочет, чтобы мы написали функцию для обращения к массиву.примеры:
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 я добавил 1 с помощью rbegin () и сделал rend следующим образом:
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 и почему второй не прошел.