Вектор в C++ Стандартна бібліотека шаблонів (STL) із прикладом

⚡ Розумний підсумок

Вектор в C++ — це динамічний масив зі стандартної бібліотеки шаблонів, який автоматично змінює розмір під час додавання або видалення елементів, зберігаючи елементи в безперервній пам'яті, щоб програмісти могли отримувати до них доступ та переміщатися по них за допомогою ітераторів.

  • 📦 Динамічний масив: A C++ Вектор збільшується або зменшується автоматично, на відміну від статичного масиву фіксованого розміру.
  • 🧩 Заголовок та синтаксис: Включіть заголовок вектора, а потім оголосіть вектор ім'я для зберігання типізованих елементів.
  • 🧭 Ітератори: begin(), end(), cbegin() та cend() переміщуються між елементами вектора, такими як вказівники.
  • 🛠️ Модифікатори: Функції push_back(), insert(), pop_back(), erase() та clear() змінюють вміст вектора.
  • 📐 Місткість: size(), capacity(), max_size(), resize() та empty() повідомляють про обсяг пам'яті або налаштовують її.
  • 🤖 Допомога AI: GitHub Copilot та подібні помічники ШІ створюють векторні операції з короткого коментаря.

C++ Вектор STL

Що таке? C++ Вектор?

A C++ Вектор — це динамічний масив, здатний автоматично змінювати розмір. Зміна розміру відбувається після додавання або видалення елемента з вектора. Зберігання автоматично обробляється контейнером. Елементи вектора зберігаються в безперервному сховищі. Це дозволяє C++ програмістам для доступу та проходження векторних елементів за допомогою ітераторів.

Вставка нових даних до вектора виконується в його кінці. Це займає диференціальний час. Видалення елемента з вектора займає постійний час. Причина полягає в тому, що немає потреби змінювати розмір вектора. Вставка або видалення елемента на початку вектора займає лінійний час.

Перш ніж писати код з векторами, корисно знати, коли вони є правильним контейнером для використання.

Коли використовувати вектор?

A C++ вектор слід використовувати за таких обставин:

  • При роботі з елементами даних, які постійно змінюються.
  • Якщо розмір даних невідомий до початку, вектор не вимагатиме від вас встановлення максимального розміру контейнера.

Як ініціалізувати вектори в C++

Синтаксис векторів в C++ це:

vector <data-type> name (items)

Як показано вище, ми починаємо з ключового слова vector.

  • Команда тип даних — це тип даних елементів, які зберігаються у векторі.
  • Команда ім'я — це назва вектора або елементів даних.
  • Команда пунктів позначає кількість елементів для векторних даних. Цей параметр необов'язковий.

Щойно вектор існує, ітератори надають вам спосіб переміщення по його елементах, подібний до вказівника.

Ітератори

Мета ітераторів — допомогти нам отримати доступ до елементів, що зберігаються у векторі. Це об'єкт, який працює як вказівник. Ось поширені ітератори, що підтримуються... C++ вектори:

  • вектор::початок(): він дає ітератор, який вказує на перший елемент вектора.
  • вектор::кінець(): він дає ітератор, який вказує на останній елемент вектора.
  • вектор::cbegin(): це те саме, що й vector::begin(), але не має можливості змінювати елементи.
  • вектор::cend(): це те саме, що й vector::end(), але не може змінювати елементи вектора.

У наступному прикладі вектор заповнюється, а потім він проходить через нього за допомогою змінних та константних ітераторів.

Приклад 1

#include <iostream> 
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;

	for (int a = 1; a <= 5; a++)

		nums.push_back(a);

	cout << "Output from begin and end: ";

	for (auto a = nums.begin(); a != nums.end(); ++a)

		cout << *a << " ";

	cout << "\nOutput from cbegin and cend: ";

	for (auto a = nums.cbegin(); a != nums.cend(); ++a)

		cout << *a << " ";

	return 0;
}

вихід:

C++ Вивід прикладу 1 векторних ітераторів

Ось скріншот коду:

C++ векторні ітератори Приклад 1 коду

Code Пояснення:

  1. Включіть файл заголовка iostream у наш код. Це дозволить нам читати з консолі та писати в неї.
  2. Включіть векторний файл заголовка в наш код. Це дозволить нам працювати з векторами в C++.
  3. Включіть простір імен std, щоб використовувати його класи та функції без його виклику.
  4. Викличте функцію main(), в яку потрібно додати логіку програми.
  5. { позначає початок тіла функції main().
  6. Оголошіть вектор з іменем nums для зберігання набору цілих чисел.
  7. Створіть цикл for, який допоможе нам перебирати вектор. Змінна допоможе нам перебирати елементи вектора, від 1-го до 5-го елементів.
  8. Вставте елементи у вектор num ззаду. Для кожної ітерації це додасть поточне значення змінної a до вектора, який становить від 1 до 5.
  9. Надрукуйте текст на консолі.
  10. Використовуйте змінну ітератора a, щоб перебирати елементи вектора nums від початку до останнього елемента. Зверніть увагу, що ми використовуємо ітератори vector::begin() і vector::end().
  11. Виведіть значення, на які вказує змінна ітератора a, на консолі для кожної ітерації.
  12. Надрукуйте текст на консолі. \n — це символ нового рядка, який переміщує курсор на новий рядок для друку звідти.
  13. Використовуйте змінну-ітератор для перебору елементів вектора nums від початку до елемента після кінця. Зверніть увагу, що ми використовуємо ітератори vector::cbegin() та vector::cend().
  14. Виведіть значення, на які вказує змінна ітератора a, на консолі для кожної ітерації.
  15. Функція main має повертати значення, якщо програма виконується успішно.
  16. Кінець тіла функції main().

Модифікатори

Модифікатори використовуються для зміни значення вказаного типу даних. Ось загальні модифікатори в C++:

  • вектор::push_back(): Цей модифікатор виштовхує елементи ззаду.
  • вектор::вставити(): Для вставки нових елементів у вектор у вказаному місці.
  • vector::pop_back(): Цей модифікатор видаляє векторні елементи зі зворотного боку.
  • вектор::стерти(): Використовується для видалення діапазону елементів із зазначеного місця.
  • вектор::очистити(): Він видаляє всі векторні елементи.

У наступному прикладі ці модифікатори застосовуються послідовно, щоб побачити, як змінюється вектор.

Приклад 2

#include <iostream>
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;
	
	nums.assign(5, 1);

	cout << "Vector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.push_back(2);
	int n = nums.size();
	cout << "\nLast element: " << nums[n - 1];

	nums.pop_back();

	cout << "\nVector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.insert(nums.begin(), 7);

	cout << "\nFirst element: " << nums[0];
	
	nums.clear();
	cout << "\nSize after clear(): " << nums.size();			
}

вихід:

C++ Вивід модифікаторів векторів Приклад 2

Ось скріншот коду:

C++ Приклад 2 коду модифікаторів векторів

Code Пояснення:

  1. Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
  2. Включіть векторний файл заголовка в наш код, щоб використовувати його функції.
  3. Включіть простір імен std, щоб використовувати його класи без його виклику.
  4. Виклик функції main(). Логіку програми слід додати в її тіло.
  5. Початок тіла функції main().
  6. Оголошіть вектор з іменем nums для зберігання деяких цілих значень.
  7. Зберігайте 5 елементів у векторі nums. Кожен із значенням 1.
  8. Надрукуйте текст на консолі.
  9. Використовуйте змінну ітератора a для повторення елементів вектора nums.
  10. Виведіть значення векторних номерів на консолі для кожної ітерації.
  11. Додайте значення 2 до кінця вектора nums.
  12. Оголошіть цілочисельну змінну n для збереження розміру вектора nums.
  13. Надрукуйте останнє значення вектора nums поруч з іншим текстом. Він повинен повернути 2.
  14. Видаліть останній елемент із вектора nums. 2 буде видалено.
  15. Друк тексту на консолі. \n переміщує курсор на новий рядок, щоб надрукувати там текст.
  16. Використовуйте змінну ітератора a для повторення елементів вектора nums.
  17. Виведіть значення векторних номерів на консолі для кожної ітерації.
  18. Вставте значення 7 на початок вектора nums.
  19. Надрукуйте перше значення вектора nums поруч з іншим текстом. Він повинен повернути 7.
  20. Видалити всі елементи з вектора nums.
  21. Надрукуйте розмір вектора num поряд з іншим текстом після очищення всього вмісту. Він повинен повернути 0.
  22. Кінець тіла функції main().

Швидкість профілювання

Використовуйте наступне Функції щоб визначити ємність вектора:

  • Розмір() – Повертає кількість елементів у векторі.
  • Max_size() – Повертає найбільшу кількість елементів, яку може зберігати вектор.
  • Місткість() – Повертає обсяг місця для зберігання, виділеного для вектора.
  • Змінити розмір() – Змінює розмір контейнера, щоб він містив n елементів. Якщо поточний розмір вектора більший за n, то елементи, що знаходяться позаду, будуть видалені з вектора. Якщо поточний розмір вектора менший за n, то на кінець вектора будуть додані додаткові елементи.
  • Порожній() – повертає значення true, якщо вектор порожній. В іншому випадку повертає значення false.

У цьому останньому прикладі показано та налаштовано сховище вектора за допомогою вищезгаданих функцій ємності.

Приклад 3

#include <iostream> 
#include <vector> 
using namespace std;
int main() {
	vector<int> vector1;
	for (int x = 1; x <= 10; x++)
		vector1.push_back(x);
	cout << "Vector size: " << vector1.size()<< endl;
	cout << "Vector capacity: " << vector1.capacity() << endl;
	cout << "Maximum size of vector: " << vector1.max_size()<< endl;
	vector1.resize(5);
	cout << "Vector size after resizing: " << vector1.size() << endl;
	if (vector1.empty() == false)
		cout << "Vector is not empty"<<endl;
	else
		cout << "Vector is empty"<<endl;
	return 0;
}

вихід:

C++ Вихідні дані прикладу 3 векторної ємності

Ось скріншот коду:

C++ Приклад 3 коду векторної ємності

Code Пояснення:

  1. Включіть файл заголовка iostream у наш код, щоб використовувати його функцію.
  2. Включіть векторний файл заголовка в наш код, щоб використовувати його функції.
  3. Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
  4. Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
  5. Створіть вектор з іменем vector1 для зберігання цілих чисел.
  6. Використовуйте цикл for, щоб створити змінну x зі значеннями від 1 до 10.
  7. Вставте значення змінної x у вектор.
  8. Надрукуйте розмір вектора поруч з іншим текстом на консолі.
  9. Надрукуйте ємність вектора поруч з іншим текстом на консолі.
  10. Надрукуйте максимальну кількість елементів, які вектор може вмістити поруч з іншим текстом на консолі.
  11. Змініть розмір вектора, щоб він містив лише 5 елементів.
  12. Надрукуйте новий розмір вектора поруч з іншим текстом.
  13. Перевірте, чи вектор не порожній.
  14. Вивести текст на консолі, якщо вектор не порожній.
  15. Використовуйте оператор else, щоб вказати, що робити, якщо вектор порожній.
  16. Текст для друку на консолі, якщо вектор порожній.
  17. Після успішного завершення програма повинна повернути значення.
  18. Кінець тіла функції main().

Поширені запитання

Вектор — це динамічний масив, який автоматично змінює свій розмір і знає свій власний розмір, тоді як вбудований масив має фіксовану довжину, встановлену під час компіляції. Вектори керують пам'яттю за вас; необроблені масиви — ні.

Використовуйте оператор нижнього індексу, такий як nums[0], для швидкого прямого доступу. Функція-член at(), як і nums.at(0), робить те саме, але викидає виняток out_of_range, коли індекс недійсний, що робить її безпечнішою.

Оголосити вектор, елементи якого самі є векторами, наприклад, вектор > сітка. Ви можете змінити її розмір за допомогою конструкторів або push_back рядків. Кожен внутрішній вектор може зростати незалежно, що дає вам гнучку матрицю зі змінним розміром.

Вектор зберігає елементи в безперервній пам'яті зі швидким довільним доступом, тоді як std::list — це двозв'язаний список зі швидкою вставкою або видаленням будь-де, але без прямої індексації. Вибирайте на основі вашого шаблону доступу.

Включіть заголовок алгоритму та викличте std::sort з ітераторами begin та end, як у sort(nums.begin(), nums.end()). Сортування за замовчуванням відбувається за зростанням; передайте користувацький компаратор або більший. () для сортування у порядку спадання.

Так. Вектор — це шаблон і може містити будь-який тип, включаючи рядки, користувацькі класи та навіть інші вектори. Оголосіть тип елемента всередині кутових дужок, наприклад, vector. або вектор .

Так. Помічники ШІ-кодування перетворюють короткий запит або коментар на робочий векторний код, включаючи оголошення, цикли push_back та ітерації. Завжди переглядайте запропоновані типи, межі та обробку ємності, оскільки ШІ може не враховувати вимоги, специфічні для проекту.

Так. Копілот GitHub пропонує оголошення векторів, виклики push_back та insert, а також цикли ітераторів під час введення тексту. Він добре обробляє повторювані шаблони, хоча вам все одно слід перевірити індекси, зміну розміру та логіку перед компіляцією.

Підсумуйте цей пост за допомогою: