Задача

2/8

Итератор в векторе

Теория Нажмите, чтобы прочитать/скрыть

Итераторы
Одним из способов перебора элементов в контейнерах (структурах данных) является итератор (iterator), которые бывают нескольких типов.
 
Итератор - структура данных, которая «указывает» на некоторый элемент контейнера, и (для некоторых контейнеров) умеет переходить к предыдущему/следующему элементу.

Для вектора используется самый мощный - итератор с произвольным доступом (random-access Iterator).  Итератор с произвольным доступом помимо последовательного перемещения может обратиться к произвольному элементу вектора.

Преимущества итераторов
1)  При удалении элементов и переборе элементов с помощью индексов ([]) нам надо все время следить за количеством оставшихся элементов, чтобы не выйти за пределы вектора, а с помощью итератора можно использовать end(), указывающий на конец вектора.
2) С помощью итератора можно легко динамически удалять и вставлять элементы в векторе. 
 
Объявление итератора
1) Объявление итератора для целочисленного вектора и указание его на первый элемент в векторе.
vector <int> myvector = { 1, 2, 3, 4, 5 };       
vector <int>::iterator it = myvector.begin(); 

2) Объявление итератора для целочисленного вектора и указание его на элемент после последнего в векторе.
vector <int> myvector = { 1, 2, 3, 4, 5 };       
vector <int>::iterator it = myvector.end();   // указывает на элемент после последнего, 
vector <int>::iterator it1 = myvector.end() - 1 ;  // указание на последний элемент.
 
Получение и вывод значения
Получение и вывод элемента на который указывает итератор.
cout << *it;
 
Перемещение позиции итератора
Перемещение позиции итератора на 3 позиции вперед.
advance(it, 3); 
 
Создание нового итератора на основе существующего
Создание нового итератора на основе существующего с продвижением на 3 позиции.
auto it1 = next(it, 3);
 
Вывод значений вектора с помощью итератора
vector<int>::iterator it;
for (it = myvector.begin(); it != myvector.end(); ++it) {
     cout<<*it<<" ";
 }


Обход вектора
Для обхода вектора от последнего элемента к первому используется обратный итератор reverse_iterator, его получение обеспечивают:
1) rbegin() -  возвращает обратный итератор, указывающий на последний элемент вектора, применение операции ++ приводит к переходу на предыдущий элемент;
2) rend() -  возвращает обратный итератор, указывающий на предшествующий первому элемент вектора, применение операции ++ приводит к переходу  на следующий.
vector<int>::reverse_iterator it = myvector.rbegin();  // указывает на последний элемент
vector<int>::reverse_iterator it = myvector.rend();    // указывает на элемент, 
                                                       // который стоит до первого, 

Задача

Дана последовательность, состоящая из целых чисел.  Напишите программу, которая делает реверс вектора с помощью reverse_iterator.

Входные данные
Сначала задано число N - количество элементов в последовательности (1<= N <= 100). Далее через пробел записаны N чисел.
 
Выходные данные
Вывести в одну строчку все элементы получившегося вектора, разделив их пробелами.
 
Пример
Входные данные Выходные данные
1 5
1 2 3 4 5
5 4 3 2 1