Информатика: Методические указания к лабораторным работам № 1-5. Функции. Обработка символьных данных. Организация работы с файлами, страница 11

Таблица 4

Операции обращения к элементам вектора

Операция

Описание

v.at(idx)

Возвращает элемент с индексом idx (при недопустимом значении индекса генерируется исключение out_of_range)

v[idx]

Возвращает элемент с индексом idx (без интервальной проверки!)

v.front()

Возвращает первый элемент (без проверки его существования!)

v.back()

Возвращает последний элемент (без проверки его существования!)

Векторы поддерживают стандартный набор операций для получения итераторов (табл. 5). Итераторы векторов относятся к категории итераторов произвольного доступа. Это означает, что с векторами в принципе могут использоваться все алгоритмы STL.

Таблица 5

Операции получения итераторов

Операция

Описание

v.begin()

Возвращает итератор произвольного доступа для первого элемента

v.end()

Возвращает итератор произвольного доступа для позиции за последним элементом


Пример 5

vector<char> v; // Создание массива нулевой длины
 //Помещаем значения в вектор
for(int i = 0; i < 10; i++) v.push_back('A' + i);
 // Получаем доступ к содержимому вектора с помощью итератора
vector<char>::iterator it;
 for (it = v.begin(); it != v.end(); it++) cout << *it <<" ";

Результат

A  B  C  D  E  F  G  H  I  J
 

v.end() возвращает итератор, указывающий не на последний элемент контейнера, а на непосредственно следующий за ним элемент. Это часто бывает удобно. Например, для любого контейнера v разность (v.end() - v.begin())всегда равна v.size() (табл. 6).

Таблица 6

Операции вставки и удаления для векторов

Операция

Описание

v.insert(pos,elem)

Вставляет в позицию итератора pos копию элемента elem и возвращает позицию нового элемента

v.insert(pos,n,elem)

Вставляет в позицию итератора pos n копий элемента elem (и не возвращает значения)

v.insert(pos,beg,end)

Вставляет копию всех элементов интервала [beg,end) в позицию итератора pos (и не возвращает значения)

Окончание табл. 6

Операция

Описание

v.push_back(elem)

Присоединяет копию elem в конец вектора

v.pop_back()

Удаляет последний элемент (не возвращая его)

v.erase(pos)

Удаляет элемент в позиции итератора pos и возвращает позицию следующего элемента

v.erase(beg,end)

Удаляет все элементы из интервала [beg,end) и возвращает позицию следующего элемента

v.cleаr()

Удаляет все элементы (контейнер остается пустым)

Пример 6

vector<char> v;
for(int i=0; i<10; i++) v.push_back('A' + i);
// Отображаем исходное содержимое вектора.
cout << "Размер = " << v.size() << endl;
cout << "Исходное содержимое вектора:\n";
for(int i=0; i<v.size(); i++) cout << v[i] << " ";
cout << endl << endl;

//Вводим итератор it и присваиваем ему адрес первого элемента

//в векторе 
vector<char>:: iterator it= v.begin();
it += 2; // указатель на 3-й элемент вектора
// Вставляем 10 символов 'X' в вектор v.
v.insert(it,10, 'X');
 
// Отображаем содержимое вектора после вставки символов
cout << "Размер вектора после вставки = "<< v.size() << endl;
 
cout << "Содержимое вектора после вставки:\n";
for(i=0; i<v.size(); i++) cout << v[i] << " ";
cout << endl << endl;
 
// Удаление вставленных элементов.
it = v.begin();
it += 2; // Указатель на 3-й элемент вектора
v.erase(it, it+10); // Удаляем 10 элементов подряд
// Отображаем содержимое вектора после удаления символов
cout << "Размер вектора после удаления символов = " << v.size() << endl;
cout << Содержимое вектора после удаления символов:\n";