- Вектори є частиною STL і відносяться до послідовних контейнерів.
- Послідовні контейнери - це впорядковані колекції, в яких кожен елемент займає певну позицію.
Відповідно до стандарту C ++, будь-який контейнер повинен містити методи begin (), end (), size (), max_size (), empty (), і swap ().
Вектор (vector) майже те ж саме, що масив, до її елементів можна звертатися також як до елементів масиву. Але у вектора є деякі переваги. Не потрібно спеціально стежити за розміром, так як вектор свій розмір знає. Щоб поміняти розмір досить видалити або додати елементи під час виконання
Щоб використовувати вектор в програмі, потрібно підключити директиву vector і вказати використовуваний простір імен std
Всі Це легше зрозуміти тим, хто знайомий з масивами
Дивимося на схожість обробки вектора і масивів
#include
using namespace std; // Використовуємо простір імен std
vector
for (int i = 0; i <10 ; i ++ ) v [ i ] = i + 1 ; //Записали в вектор числа 1,2,3. 10
for (int i = 0; i <10 ; i ++ ) cout < int arr [10]; // Оголосили масив в десять елементів типу int for (int i = 0; i <10 ; i ++ ) arr [ i ] = i + 1 ; //Записали в массив числа 1,2,3. 10 for (int i = 0; i <10 ; i ++ ) cout < Думаю хто вже вивчав основи, той відразу зрозуміє що тут до чого. =================== Почав я своє знайомство з векторами з першого і другого методів push_back і pop_back. Щоб така ініціалізація векторів працювала, можливо в компіляторі потрібно поставити якийсь прапор в налаштуваннях. Де цей прапор я не знаю, так що не варто питати. Мені доведеться обходиться додатковим масивом. Я не думаю, що мені варто розписувати кожен метод. Мені (може і помилково) здається, що той хто представляє то таке масив, той подивившись на те, що тут вже описано легко зрозуміє що до чого Крім цього, має сенс розповісти про деякі інші особливості векторів. Одна з таких особливостей, це те, що вектор вміє розширювати обсяг пам'яті при додаванні елементів, але ніколи самостійно не знищує її. Замість того, щоб знищити виділену пам'ять, він залишає цю пам'ять в резерві. Якби вектор мислив, то його думки звучали б так: «А раптом потім стане в нагоді, буду я йому (свого батька) знову виділяти, то що вже виділяв, обійдеться». Тобто якщо насильно не змусити його очистити пам'ять, то скільки максимальної пам'яті було виділено, стільки і залишається виділено. Пов'язано це з тим, що виділення пам'яті операція вимагає деяких витрат часу, отже сильно знижують ефективність програми. Слід розуміти і розрізняти два поняття: Ємність і Розмір вектора. Під ємністю вектора розуміється то, скільки елементів в вектор можна покласти без додаткового виділення пам'яті, а під розміром розуміється то, скільки елементів зберігає в собі вектор. Для того, щоб дізнатися розмір вектора використовується метод вектора size. а для того, щоб дізнатися ємність вектора використовується метод capacity. Варто звернути увагу на те, що метод capacity відображає загальну кількість елементів, а не те, скільки елементів можна додати додатково без додаткових виділень пам'яті Для тих хто працював з рядками, швидше за все буде зрозуміліше що позначає те, що я тільки що написав. Зазвичай під рядок виділяється певна кількість пам'яті і при виведенні рядка, рядок виводиться до ознаки закінчення, але за ознакою закінчення рядка в лежить сміття. Ось вся рядок, включаючи сміттєвий ділянку - це як ємність вектора. Резервувати пам'ять в векторі можна самостійно, для цього використовується метод reserve. При роботі з векторами потрібно вміти працювати і з пам'яттю і з кількістю елементів вектора. Для того, щоб звільнити зарезервовану пам'ять в векторі використовують трюк з обміном Swap Trick
Основні методи Вектора
push_back (element) - додати елемент в кінець vector-а
pop_back (element) - видалити останній елемент vector-а
insert (***) - три варіанти (перезавантаження методу) вставки в якусь область в векторі, перший параметр позиція вставки задана Ітератор, інші вказують на контейнер, або кількість і контейнер, або пару ітераторів вказують від якої до якої позиції з іншого контейнера взяти дані.
erase (iterator або iterator від, і до) - видаляє елемент або послідовність елементів з vector-а
begin () - повертає ітератор, який вказує на початок колекції.
end () - повертає ітератор, який вказує на кінець колекції. При цьому він вказує не самий останній елемент, а на уявний елемент за останнім.
at (index) - метод доступу, до елементів колекції, на відміну від оператора [], перевіряє вихід з-поза меж колекції, і у випадку чого генерує виняток.
clear () - видаляє всі елементи колекції, при цьому якщо в ньому міститися об'єкти класів викликає їх деструктори. А якщо ж покажчики на об'єкти, то у Вас буде витік пам'яті (memory leaks =)), так delete за Вас ніхто не викличе.
===================
Наводжу код програми з моєї невеликої помилкою
Невеликий підсумок до вищесказаногоСхожі статті