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

⚡ Умное резюме

Вектор в C++ Это динамический массив из стандартной библиотеки шаблонов, который автоматически изменяет свой размер при добавлении или удалении элементов, храня элементы в непрерывной памяти, чтобы программисты могли получать к ним доступ и перемещаться по ним с помощью итераторов.

  • 📦 Динамический массив: A C++ В отличие от статического массива фиксированного размера, вектор автоматически увеличивается или уменьшается в размерах.
  • 🧩 Заголовок и синтаксис: Включите заголовок вектора, затем объявите вектор. имя для хранения типизированных элементов.
  • 🧭 Итераторы: Функции begin(), end(), cbegin() и cend() перемещаются по элементам вектора подобно указателям.
  • 🇧🇷 Модификаторы: Функции push_back(), insert(), pop_back(), erase() и clear() изменяют содержимое вектора.
  • 📐 Производительность: Функции size(), capacity(), max_size(), resize() и empty() сообщают о размерах или изменяют объем занимаемого места.
  • 🤖 Помощь ИИ: GitHub Copilot и аналогичные ИИ-помощники создают шаблоны для векторных операций на основе короткого комментария.

C++ Векторный STL

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

A C++ Вектор — это динамический массив, способный автоматически изменять свой размер. Изменение размера происходит после добавления или удаления элемента из вектора. Хранение обрабатывается контейнером автоматически. Элементы вектора хранятся в непрерывном хранилище. Это позволяет C++ программисты могут получать доступ к элементам вектора и перемещаться по ним с помощью итераторов.

Вставка новых данных в вектор осуществляется в его конце. Это занимает дифференциальное время. Удаление элемента из вектора занимает постоянное время. Причина в том, что нет необходимости изменять размер вектора. Вставка или удаление элемента в начале вектора занимает линейное время.

Прежде чем писать код с использованием векторов, полезно знать, когда именно к ним следует обращаться.

Когда использовать вектор?

A C++ Вектор следует использовать при следующих обстоятельствах:

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

Как инициализировать векторы в C++

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

vector <data-type> name (items)

Как показано выше, мы начинаем с ключевого слова вектор.

  • тип данных — это тип данных элементов, которые будут храниться в векторе.
  • имя — это название вектора или элементов данных.
  • пункты Укажите количество элементов в векторных данных. Этот параметр является необязательным.

После создания вектора итераторы предоставляют способ перемещения по его элементам, подобный указателю.

итераторы

Итераторы предназначены для доступа к элементам, хранящимся в векторе. Это объект, работающий как указатель. Вот наиболее распространенные итераторы, поддерживаемые вектором. C++ векторы:

  • vector::begin(): он дает итератор, указывающий на первый элемент вектора.
  • vector::end(): он дает итератор, указывающий на последний элемент вектора.
  • вектор::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 для перебора элементов векторных чисел от начала до элемента за концом. Обратите внимание, что мы используем итераторы Vector::begin() и вектор::end().
  11. Выведите значения, на которые указывает переменная итератора a, на консоли для каждой итерации.
  12. Напечатайте текст на консоли. \n — это символ новой строки, перемещающий курсор на новую строку для печати оттуда.
  13. Используйте переменную-итератор для перебора элементов вектора nums от начала до конца. Обратите внимание, что мы используем итераторы vector::cbegin() и vector::cend().
  14. Выведите значения, на которые указывает переменная итератора a, на консоли для каждой итерации.
  15. Основная функция должна возвращать значение, если программа работает успешно.
  16. Конец тела функции main().

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

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

  • вектор::push_back(): Этот модификатор смещает элементы сзади.
  • вектор::вставка(): Для вставки новых элементов в вектор в указанном месте.
  • вектор::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 элементов в векторных числах. Каждый со значением 1.
  8. Напечатайте текст на консоли.
  9. Используйте переменную-итератор a для перебора элементов векторных чисел.
  10. Выведите значения векторных чисел на консоль для каждой итерации.
  11. Добавьте значение 2 в конец векторных чисел.
  12. Объявите целочисленную переменную n для хранения размера векторных чисел.
  13. Распечатайте последнее значение векторных чисел рядом с другим текстом. Он должен вернуть 2.
  14. Удалите последний элемент из векторных чисел. 2 будут удалены.
  15. Вывести текст на консоль. \n перемещает курсор на новую строку, чтобы напечатать там текст.
  16. Используйте переменную-итератор a для перебора элементов векторных чисел.
  17. Выведите значения векторных чисел на консоль для каждой итерации.
  18. Вставьте значение 7 в начало векторных чисел.
  19. Распечатайте первое значение векторных чисел рядом с другим текстом. Должно вернуться 7.
  20. Удалите все элементы из векторных чисел.
  21. Напечатайте размер векторного числа рядом с другим текстом после очистки всего содержимого. Он должен вернуть 0.
  22. Конец тела функции main().

Рабочий диапазон

Используйте следующее Функции определить вместимость вектора:

  • Размер() – Функция возвращает количество элементов в векторе.
  • Макс_размер() – Функция возвращает максимальное количество элементов, которое может хранить вектор.
  • Емкость() – Функция возвращает объем памяти, выделенный для вектора.
  • Resize() – Изменяет размер контейнера, чтобы он вмещал 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().

Часто задаваемые вопросы (FAQ)

Вектор — это динамический массив, который автоматически изменяет свой размер и знает его самостоятельно, в то время как встроенный массив имеет фиксированную длину, устанавливаемую во время компиляции. Векторы управляют памятью автоматически; обычные массивы этого не делают.

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

Объявите вектор, элементы которого сами являются векторами, например, вектор > сетка. Вы можете изменять ее размер с помощью конструкторов или функции push_back rows. Каждый внутренний вектор может расти независимо, что обеспечивает гибкую матрицу с возможностью изменения размера.

Вектор хранит элементы в смежных областях памяти с быстрым произвольным доступом, тогда как std::list — это двусвязный список с быстрой вставкой или удалением элементов в любом месте, но без прямой индексации. Выбирайте в зависимости от вашего шаблона доступа.

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

Да. Вектор — это шаблон, и он может содержать любой тип данных, включая строки, пользовательские классы и даже другие векторы. Тип элемента указывается внутри угловых скобок, например, `vector`. или вектор .

Да. Искусственный интеллект в качестве помощника в программировании преобразует короткий запрос или комментарий в работающий векторный код, включая объявление, циклы с обратной связью и итерацию. Всегда проверяйте предлагаемые типы, границы и обработку емкости, поскольку ИИ может упустить из виду специфические требования проекта.

Да. Второй пилот GitHub Предлагает объявления векторов, вызовы push_back и insert, а также циклы итераторов по мере ввода. Хорошо справляется с повторяющимся шаблонным кодом, хотя перед компиляцией все равно следует проверять индексы, изменение размера и логику.

Подведем итог этой публикации следующим образом: