Клас vector. Динамічний масив. Загальні відомості. Огляд методів. Створення динамічного масиву. Способи доступу до елементів вектору
Дана тема є початком вивчення засобів класу vector, що представляє собою динамічний масив.
Зміст
- 1. Загальні відомості про клас vector. Огляд методів класу
- 2. Створення динамічного масиву типу vector. Конструктори. Приклад
- 3. Способи доступу до елементів вектору. Індексування [ ]
- Споріднені теми
Пошук на інших ресурсах:
1. Загальні відомості про клас vector. Огляд методів класу
Клас vector представляє собою динамічний масив, розмір якого у програмі може змінюватись при необхідності. Цей клас є одним з найбільш універсальних та поширених у використанні при написанні програм на C++. Доступ до елементів класу здійснюється як до звичайного масиву з допомогою квадратних дужок [ ].
Щоб використовувати методи та константи масиву типу vector потрібно підключити заголовок <vector> та простір імен std
#include <vector> using namespace std;
Шаблонна специфікація класу vector має наступний вигляд:
template <class T, class Allocator = allocator<T> > class vector
тут
- T – тип елементів масиву. Це може бути будь-який базовий тип (int, float, char тощо) або тип, розроблений користувачем;
- Allocator – назва класу, який забезпечує розподіл пам’яті.
Методи класу vector можна умовно розбити на 3 групи:
- 1. Методи, що визначають та змінюють загальні характеристики масиву.
- 1.1. Метод size(). Визначити розмір вектору
- 1.2. Метод max_size(). Максимально-допустимий розмір масиву
- 1.3. Метод capacity(). Визначити розмір масиву з врахуванням зарезервованої пам’яті
- 1.4. Метод empty(). Визначити, чи пустий вектор
- 1.5. Метод shrink_to_fit(). Вирівняти розмір масиву з врахуванням зарезервованої пам’яті за фактичним розміром масиву
- 1.6. Метод reserve(). Зарезервувати пам’ять для додаткових елементів масиву
- 1.7. Метод resize(). Змінити розмір масиву
- 2. Методи, що модифікують (змінюють) дані в масиві
- 2.1. Метод push_back(). Додати елемент в кінець вектору
- 2.2. Метод pop_back(). Видалити останній елемент вектору
- 2.3. Метод clear(). Видаляє з масиву всі елементи
- 2.4. Метод swap(). Обмін місцями двох векторів
- 2.5. Присвоєння масивів. Перевантажений оператор =
- 2.6. Метод erase(). Видалити елемент або ряд елементів заданого діапазону
- 2.7. Метод insert(). Вставляє елемент або групу елементів у вектор
- 2.7.1. Вставка списку ініціалізації у вектор
- 2.7.2. Вставка елементу задану кількість разів у задану позицію
- 2.7.3. Вставка одиночного елементу у задану позицію
- 2.7.4. Вставка декількох елементів з заданого діапазону
- 2.8. Метод assign(). Утворити масив з існуючих даних
- 3. Методи, що забезпечують доступ до елементів масиву
- 3.1 Метод at(). Отримати елемент вектору за його позицією (індексом)
- 3.2. Метод front(). Повертає посилання на перший елемент вектору
- 3.3. Метод back(). Повертає посилання на останній елемент вектору
- 3.4. Метод data(). Отримати покажчик на вектор
- 3.5. Метод begin(). Повернути ітератор, що вказує на перший елемент вектору
- 3.6. Метод end(). Повернути ітератор, що вказує на останній елемент масиву
- 3.7. Методи cbegin(), cend(). Отримати константний ітератор на початок та кінець масиву
- 3.8. Методи rbegin(), rend(). Доступ до елементів масиву з допомогою реверсного ітератора
- 3.9. Методи crbegin(), crend(). Встановити на початок та кінець масиву константний реверсний ітератор
⇑
2. Створення динамічного масиву типу vector. Конструктори. Приклад
Для створення масиву у класі vector оголошується ряд конструкторів. Нижче наведено найбільш поширені з них.
Щоб створити пустий масив використовується конструктор
explicit vector(const Allocator &a = Allocator());
Щоб створити масив, який містить num елементів зі значенням val, використовується конструктор
explicit vector(size_t num, const T &val = T(), const Allocator &a = Allocator());
Щоб створити масив на основі іншого масиву ob, потрібно використати конструктор
vector(const vector<T, Allocator> &ob);
Щоб створити масив на основі діапазону на який вказують ітератори start та end, використовується наступний конструктор
template <class InIter> vector<InIter start, InIter end, const Allocator &a = Allocator());
Приклад. У прикладі створюються різні масиви типу vector.
#include <vector> using namespace std; ... // 1. Створити вектор з 10 чисел типу int vector<int> A1(10); // 2. Створити пустий вектор, елементи якого мають тип char vector<char> A2; // 3. Створити вектор з 5 чисел типу double, // записати у вектор значення 1.0 vector<double> A3(5, 1.0); // 4. На основі вектору A3 створити новий вектор A4 vector<double> A4(A3); // 5. Створити вектор на основі ітераторів, які вказують на // елементи вектору A4 з індексами від 0 до 1. vector<double>::iterator start, end; // оголосити ітератори start = A4.begin(); // встановити перший ітератор на позицію 0 end = A4.begin() + 2; // другий ітератор в позиції 2 (позиція після 1) vector<double> A5(start, end); // створити вектор ...
⇑
3. Способи доступу до елементів вектору. Індексування [ ]
Після створення вектору, можна отримувати доступ до його елементів одним з наступних способів:
- з допомогою операції індексування [ ], як у випадку зі звичайним масивом;
- з допомогою ітератора;
- з допомогою методу at().
Приклади доступу до елементів вектора.
#include <vector> using namespace std; ... // 1. Доступ до вектора з допомогою індексатора [] // 1.1. Створити вектор з 5 чисел типу int vector<int> A1(5); // 1.2. Записати у вектор значення [ 1, 2, 3, 4, 5 ] for (int i = 0; i < A1.size(); i++) A1[i] = i + 1; // 1.3. Вивести вектор на екран for (int i = 0; i < A1.size(); i++) cout << A1[i] << " "; cout << endl; // 2. Доступ до елементів вектору з допомогою ітераторів // 2.1. Створити вектор з 5 чисел типу float vector<float> A2(5); // 2.2. Оголосити ітератор на вектор типу float vector<float>::iterator p; // 2.3. Записати у вектор числа [ 1.1, 2.2, 3.3, 4.4, 5.5 ] // з допомогою ітератора p = A2.begin(); int i = 0; while (p != A2.end()) { *p = (float)((i + 1) + (i + 1) * 0.1); p++; i++; } // 2.4. Вивести вектор з допомогою ітератора p = A2.begin(); while (p != A2.end()) { cout << *p << " "; p++; } cout << endl; // 3. Доступ до елементів вектору з допомогою методу at() // Метод at() - отримати елемент вектору за його позицією vector<double> A3(5); // Створити масив з 5 елементів типу double // Заповнити довільними значеннями A3.at(0) = 2.8; // A3[0] = 2.8; A3.at(1) = 3.3; // A3[1] = 3.3; ...
⇑
Споріднені теми
- Методи, що визначають та змінюють загальні характеристики масиву: size(), max_size(), capacity(), empty(), shrink_to_fit(), resize(), reserve()
- Методи, що змінюють дані в масиві. Методи push_back(), pop_back(), clear(), swap(), operator=(), swap(), erase(), insert(), assign()
- Методи, що забезпечують доступ до елементів масиву: at(), front(), back(), data(), begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin(), crend()
⇑