Функция make_reverse_iterator
Функция make_reverse_iterator создает
обратный итератор (<reverse_iterator>)
из переданного ей обычного итератора.
Обратный итератор позволяет обходить
контейнер в обратном направлении - от
последнего элемента к первому. В качестве
параметра функция принимает обычный
итератор, а возвращает соответствующий
ему обратный итератор.
Функция объявлена в заголовочном файле
<iterator> и доступна начиная
со стандарта C++14.
Синтаксис
template <class Iter>
reverse_iterator<Iter> make_reverse_iterator(Iter it);
Пример
Давайте создадим обратный итератор из
итератора, указывающего на элемент 'c'
в строке "abcde", и выведем значение,
на которое он указывает:
#include <iostream>
#include <string>
#include <iterator>
using namespace std;
int main()
{
string str = "abcde";
auto it = str.begin() + 2;
auto rev = make_reverse_iterator(it);
cout << *rev << endl;
return 0;
}
Результат выполнения кода:
"b"
Обратите внимание: обратный итератор,
построенный из итератора на элемент с
индексом 2, указывает на предыдущий
элемент с индексом 1. Это связано
с тем, что разыменование обратного
итератора возвращает элемент, стоящий
перед базовым итератором.
Пример
Давайте создадим обратный итератор из
итератора end и используем его для
обхода всего вектора в обратном порядке:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
auto rev = make_reverse_iterator(vec.end());
auto revEnd = make_reverse_iterator(vec.begin());
while (rev != revEnd)
{
cout << *rev << " ";
++rev;
}
cout << endl;
return 0;
}
Результат выполнения кода:
5 4 3 2 1
Смотрите также
-
класс
reverse_iterator,
который представляет обратный итератор -
функция
rbegin,
которая возвращает обратный итератор на первый элемент в обратном порядке -
функция
rend,
которая возвращает обратный итератор на элемент перед первым -
функция
next,
которая сдвигает итератор вперед на заданное число позиций