Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора II Sem.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
680 Кб
Скачать
☆

12.3.1. Доступ до елементів вектора за допомогою ітератора

Як уже зазначалося вище, масиви і покажчики у мові програмування C++ тісно пов'язані між собою. До елементів масиву можна отримати доступ як за допомогою індексу, так і за допомогою покажчика. У бібліотеці STL аналогічний зв'язок існує між векторами й ітераторами. Це означає, що до членів вектора можна звертатися як за допомогою індексу, так і за допомогою ітератора. Цю можливість продемонстровано у наведеному нижче коді програми.

Демонстрація механізму доступу до елементів вектора за допомогою ітератора

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

#include <vector> // Для роботи з контейнерним класом "Вектор"

using namespace std; // Використання стандартного простору імен

int main()

{

vector<char> vek; // Побудова вектора нульової довжини

// Поміщаємо значення у вектор.

for(int i=0; i<10; i++) vek.push_back('A' + i);

// Отримуємо доступ до вмісту вектора за допомогою індексу.

for(int i=0; i<10; i++) cout << vek[i] << " ";

cout << endl;

// Отримуємо доступ до вмісту вектора за допомогою ітератора.

vector<char>::iterator p = vek.begin();

while(p != vek.end()) {

cout << *p << " ";

p++;

}

getch(); return 0;

}

Ось як виглядають результати виконання цієї програми:

ABCDEFGHIJ

ABCDEFGHIJ

У цьому коді програми спочатку створюється вектор нульової довжини. Потім за допомогою функції push_back() у кінець вектора поміщаються символи, внаслідок чого розмір вектора відповідно збільшується.

Зверніть увагу на те, як оголошується ітератор р. Тип цього ітератора визначається контейнерними класами. Тому _____для отримання ітератора для конкретного контейнера використовуйте оголошення, аналогічне показаному у цьому прикладі: просто вкажіть для цього ітератора ім'я контейнера. У нашій програмі ітератор р ініціалізувався так, щоб він указував на початок вектора (за допомогою функції-члена класу begin()). Ітератор, який повертає ця функція, можна потім використовувати для поелементного доступу до вектора, інкрементуючи його відповідно. Цей процес відбувається аналогічно тому, як можна використовувати покажчик для доступу до елементів масиву. Щоб визначити, коли буде досягнуто кінець вектора, використовується функція-член end(). Ця функція повертає ітератор, встановлено за останнім елементом вектора. Тому, якщо значення р дорівнює vek.end(), то кінець вектора досягнуто.

12.3.2. Вставлення та видалення елементів з вектора

Окрім занесення нових елементів у кінець вектора, у нас є можливість вставляти елементи у середину вектора, використовуючи функцію insert(). Видаляти елементи можна за допомогою функції erase(). Використання функцій insert() і erase() продемонстровано у наведеному нижче коді програми.

Демонстрація механізму вставлення елементів у вектор і видалення їх з нього

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

#include <vector> // Для роботи з контейнерним класом "Вектор"

using namespace std; // Використання стандартного простору імен

int main()

{

vector<char> vek; // Побудова вектора нульової довжини

// Поміщаємо значення у вектор.

for(int i=0; i<10; i++) vek.push_back('A' + i);

// Відображаємо початковий вміст вектора.

cout << "Розмір = " << vek.size() << endl;

cout << "Початковий вміст вектора:" << endl;

for(int i=0; i<vek.size(); i++) cout << vek[i] << " ";

cout << endl;

// Отримуємо доступ до вмісту вектора за допомогою ітератора.

vector<char>::iterator p = vek.begin();

p += 2; // Покажчик на 3-й елемент вектора

// Вставляємо 10 символів 'x' у вектор vek.

vek.insert(p, 10, 'x');

// Відображаємо вміст вектора після вставлення символів.

cout << "Розмір вектора після вставлення = " << vek.size() << endl;

cout << "Вміст вектора після вставлення:" << endl;

for(int i=0; i<vek.size(); i++) cout << vek[i] << " ";

cout << endl;

// Видалення вміщених елементів.

p = vek.begin();

p += 2; // Покажчик на 3-й елемент вектора

vek.erase(p, p+10); // Видаляємо 10 елементів підряд.

// Відображаємо вміст вектора після видалення символів.

cout << "Розмір вектора після видалення символів = " << vek.size() << endl;

cout << "Вміст вектора після видалення символів:" << endl;

for(int i=0; i<vek.size(); i++) cout << vek[i] << " ";

cout << endl;

getch(); return 0;

}

Внаслідок виконання ця програма відображає на екрані такі результати:

Розмір = 10

Початковий вміст вектора:

A B C D E F G H I J

Розмір вектора після вставлення = 20

Вміст вектора після вставлення:

A B x x x x x x x x x x C D E F G H I J

Розмір вектора після видалення символів = 10

Вміст вектора після видалення символів:

A B C D E F G H I J