Векторы в С++ (vector)
Одним из видов динамического массива в С++ является вектор (vector)
 
Вектор (vector) — это структура данных, которая уже является моделью динамического массива.

Обычные массивы в С++ не имеют каких-либо специальных функций и методов для работы с ними. Вектора в C++ относятся к структурам данных, которые содержат больше количество дополнительных функций для работы с элементами.
 
Создание вектора
#include <vector>
...
int main()
{
    // объявление целочисленного вектора v для 10 элементов
    vector <int> v(10); 
 
    // тоже самое с нулевыми начальными значениями (вектор v1)
    vector <int> v1(10, 0);
...

 
Заполнение вектора
Способ 1
Выделяем память для n-го количества элементов и заполняем их, считывая их с клавиатуры.
 
int n;
cin >> n;
vector  a(n);
for (int i = 0; i < n; i++) 
    cin >> a[i];

Способ 2
Второй способ бывает нужен когда количество элементов неизвестно. Сначала создается пустой вектор, а потом с помощью метода push_back() новый элемент добавляется в конец вектора.
 
int n;
cin >> n;
vector  a;

for (int i = 0; i < n; i++) {
      int b;
      cin >> b;
      a.push_back(b);   
}

Размер вектора
int b = a.size();

Итераторы
Одним из способов перебора элементов в контейнерах (структурах данных) является итератор (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();    // указывает на элемент, 
                                                       // который стоит до первого,