Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

Int mainO

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

// Поміщаємо значення у вектор. for(int і=0; і<10; І++) vek.push_back('A' + і);

// Отримуємо доступ до вмісту вектора за допомогою індексу. for(int і=0; і<10; І++) cout « vek[i] « " cout « endl;

// Отримуємо доступ до вмісту вектора за допомогою ітератора. vector<char>::iteratorp = vek.beginO; while(p != vek.endO) { cout « *p « " p++;

}

getchQ; return 0;

}

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

АВСОЕРОНи

АВСОЕРОНи

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

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

Цей процес відбувається аналогічно тому, як можна використовувати покажчик для доступу до елементів масиву. Щоб визначити, коли буде досягнуто кінець ве­ктора, використовується функція-член епс)0. Ця функція повертає ітератор, вста­новлено за останнім елементом вектора. Тому, якщо значення р дорівнює уек.епсІО, то кінець вектора досягнуто.

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

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

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

#include <vcl> #include <iostream> #include <conio> #include <vector> using namespace std;

і видалення їх з нього

// Для потокового введення-виведення // Для консольного режиму роботи // Для роботи з контейнерним класом "Вектор' // Використання стандартного простору імен

Int mainO

{

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

// Поміщаємо значення у вектор. for(int і=0; і<10; І++) vek.push_back('A' + і);

// Відображаємо початковий вміст вектора, cout«"Розмір ="« vek.size()« endl; cout«"Початковий вміст вектора:"« endl; for(int і=0; i<vek.size(); і++) cout« vek[i]«""; cout« endl;

// Отримуємо доступ до вмісту вектора за допомогою ітератора. vector<char>::iteratorp = vek.beginO; р += 2; // Покажчик на 3-й елемент вектора

// Вставляємо 10 символів 'х' у вектор vek. vek.insert(p, 10, У);

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

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

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

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

cout« endl;

// Видалення вміщених елементів, р = vek.beginO;

р += 2; // Покажчик на 3-й елемент вектора vek.erase(p, р+10); // Видаляємо 10 елементів підряд.

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

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

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

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

cout« endl; getchO; return 0;

}

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

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

ABCDEFGHIJ

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

ABxxxxxxxxxxCDEFGHIJ

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

ABCDEFGHIJ

  1. Збереження у векторі об'єктів класу

У попередніх прикладах вектори слугували для зберігання значень тільки вбудованих типів, але цим їх можливості не обмежуються. У вектор можна помі­щати об'єкти будь-якого типу, в т.ч. об'єкти класів, які створюються програміс­том. Розглянемо приклад, у якому вектор використовують для зберігання об'єктів класу kooClass. Зверніть увагу на те, що у цьому класі визначаються конструктор за замовчуванням і перевизначені версії операторів "<" і "==". Майте на увазі, що, можливо, Вам доведеться визначити і інші оператори порівняння. Це залежить від того, як використовуваний Вами компілятор реалізує бібліотеку STL.

Код програми 12.4. Демонстрація механізму зберігання у векторі об'єктів класу #include <vcl>

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

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

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

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

class kooClass {// Оголошення класового типу int х, у, z; // Тривимірні координати public:

kooClassO {х = у = z = 0;}

kooClass(int а, int b, int c) {x = а; у = b; z = c;}

// Повертає модифікований об'єкт, адресований покажчиком kooClass &operator+(int а) {х += а; у += a; z += a; return *this;} friend ostream &operator«(ostream &stream, kooClass ObjA); friend bool operator<(kooClass ObjA, kooClass ObjB); friend bool operator==(kooClass ObjA, kooClass ObjB);

};

// Відображаємо координати x, у, z за допомогою оператора виведення для класу kooClass.

ostream &operator«(ostream &stream, kooClass ObjA)

{

stream «"x="« ObjA.x «",

stream «"y="« ObjA.y «",

stream «"z="« ObjA.z « endl;

return stream; // Повертає посилання на параметр stream

}

bool operator<(kooClass ObjA, kooClass ObjB)

{

return (ObjA.x + ObjA.y + ObjA.z) < (ObjB.x + ObjB.y + ObjB.z);

}

bool operator==(kooClass ObjA, kooClass ObjB)

{

return (ObjA.x + ObjA.y + ObjA.z) == (ObjB.x + ObjB.y + ObjB.z);

}