Динамические массивы: vector




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

Преимущества итераторов:
1)  При удалении элементов и переборе элементов с помощью [] нам надо все время следить на количеством оставшихся элементов, чтобы не выйти за пределы вектора, а с помощью итератора можно использовать end(), указывающий на конец вектора.

2) С помощью итератора можно легко динамически удалять и вставлять элементы в векторе. 

Объявление итератора для целочисленного вектора и указание его на первый элемент в векторе:

vector<int> myvector = { 1, 2, 3, 4, 5 };       
vector<int>::iterator it = myvector.begin();     

Объявление итератора для целочисленного вектора и указание его на элемент после последнего  в векторе:

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

 

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

Входные данные
Сначала задано число N — количество элементов в последовательности (1<= N <= 100). Далее через пробел записаны N чисел.
 
Выходные данные
Необходимо вывести массив отсортированный по убыванию последней цифре в числе.
 
Ввод Вывод
5
1 2 3 4 5
5 4 3 2 1
C++
1
#include <iostream>      
2
#include <vector>      
3
using namespace std;      
4
int main()      
5
{      
6
	int n;      
7
	vector<int> myvector;          
8
       cin>>n;      
9
       for(int i=0;i<n;i++)      
10
         {      
11
          int a;      
12
          cin>>a;      
13
         myvector.push_back(a);      
14
         }      
15
    vector<int>::reverse_iterator it;      
16
17
	 {      
18
         cout<<*it<<" ";      
19
     }      
20
 }      
Your last submission is saved in the editor window.
     

Results:

All results: