Функция prev
Функция prev возвращает итератор, указывающий на элемент, расположенный на n позиций раньше исходного. По умолчанию сдвиг равен 1. Функция не изменяет исходный итератор, а возвращает его копию, смещенную назад. В первый параметр мы передаем итератор, от которого начинаем движение, а во второй - количество позиций для сдвига назад.
Функция доступна из заголовочного файла iterator и работает с двунаправленными итераторами (bidirectional iterators) и итераторами произвольного доступа (random access iterators).
Синтаксис
prev(iterator, [count])
Пример
Давайте сдвинем итератор вектора на одну позицию назад и выведем значение элемента:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
auto it = vec.end();
auto prevIt = prev(it);
cout << *prevIt << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Давайте сдвинем итератор на три позиции назад от конца вектора и выведем значение:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
auto it = vec.end();
auto prevIt = prev(it, 3);
cout << *prevIt << endl;
return 0;
}
Результат выполнения кода:
3
Пример
Давайте пройдем по вектору в обратном порядке, используя функцию prev в цикле:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.end(); it != vec.begin(); )
{
it = prev(it);
cout << *it << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
5 4 3 2 1