std::vector в C++: динамические массивы, итераторы и практические примеры
Что такое std::vector в C++?
std::vector — это динамический массив, который автоматически меняет свой размер при добавлении или удалении элементов. Элементы хранятся непрерывно, обеспечивая быстрый индексированный доступ и перебор через итераторы.
Вставка в конец выполняется за амортизированное постоянное время. Удаление последнего элемента — тоже постоянное время, в то время как вставка или удаление в начале или середине требует сдвига элементов, что линейно по времени.
Когда использовать vector?
- Когда нужен контейнер переменного размера для элементов, меняющихся со временем.
- Когда итоговый размер коллекции неизвестен на этапе компиляции.
Как инициализировать векторы в C++
std::vector<тип> имя (размер, значение); // размер и значение опциональны
типзадаёт тип элементов.имя— идентификатор вектора.- Опциональный
размеррезервирует место;значениеинициализирует все элементы.
Итераторы
Итераторы предоставляют указатель-подобный интерфейс к элементам вектора. Часто используемые функции:
begin()— итератор на первый элемент.end()— итератор за последним элементом.cbegin()— константный итератор на первый элемент.cend()— константный итератор за последним элементом.
Модификаторы
Модификаторы изменяют содержимое вектора. Ключевые функции:
push_back()— добавить элемент в конец.insert()— вставить в указанную позицию.pop_back()— удалить последний элемент.erase()— удалить диапазон элементов.clear()— удалить все элементы.
Пример 1: Базовая итерация
#include <iostream>
#include <vector>
int main() {
std::vector<int> nums;
for (int a = 1; a <= 5; ++a) {
nums.push_back(a);
}
std::cout << "Output from begin and end: ";
for (auto it = nums.begin(); it != nums.end(); ++it) {
std::cout << *it << ' ';
}
std::cout << "\nOutput from cbegin and cend: ";
for (auto it = nums.cbegin(); it != nums.cend(); ++it) {
std::cout << *it << ' ';
}
return 0;
}
Вывод:

Пример 2: Продвинутые модификаторы
#include <iostream>
#include <vector>
int main() {
std::vector<int> nums;
nums.assign(5, 1); // пять элементов, все инициализированы 1
std::cout << "Vector contents: ";
for (size_t i = 0; i < nums.size(); ++i) {
std::cout << nums[i] << ' ';
}
nums.push_back(2);
std::cout << "\nLast element: " << nums.back();
nums.pop_back();
std::cout << "\nVector contents: ";
for (int a : nums) std::cout << a << ' ';
nums.insert(nums.begin(), 7);
std::cout << "\nFirst element: " << nums.front();
nums.clear();
std::cout << "\nSize after clear(): " << nums.size();
return 0;
}
Вывод:

Функции ёмкости (capacity)
Определение и управление характеристиками хранения вектора:
size()— текущее число элементов.max_size()— теоретический максимум элементов.capacity()— выделенная ёмкость памяти.resize(n)— изменить число элементов наn, добавляя или удаляя по необходимости.empty()— true, если вектор пуст.
Пример 3: Исследование ёмкости
#include <iostream>
#include <vector>
int main() {
std::vector<int> vector1;
for (int x = 1; x <= 10; ++x) {
vector1.push_back(x);
}
std::cout << "Vector size: " << vector1.size() << std::endl;
std::cout << "Vector capacity: " << vector1.capacity() << std::endl;
std::cout << "Maximum size of vector: " << vector1.max_size() << std::endl;
vector1.resize(5);
std::cout << "Vector size after resizing: " << vector1.size() << std::endl;
if (!vector1.empty())
std::cout << "Vector is not empty" << std::endl;
else
std::cout << "Vector is empty" << std::endl;
return 0;
}
Вывод:

Ключевые выводы
std::vector— высокоэффективный автоматически расширяемый контейнер.- Элементы размещены в непрерывной памяти, давая быстрый произвольный доступ.
- Вставка и удаление в конце — амортизированное O(1); в начале или середине — O(n).
- Векторы идеальны для сценариев с непредсказуемыми или меняющимися размерами данных.
Язык C
- Стандартные библиотечные функции в C: практическое руководство
- Операторы в C++: типы, примеры и практические программы
- Цикл do-while в C++: синтаксис, примеры и вложенные циклы
- Оператор switch-case в C++: синтаксис, применение и практические примеры
- Динамическое выделение массивов в C++: практическое руководство с примерами кода
- Указатели в C++: концепции, примеры и практические применения
- Перегрузка операторов в C++: практическое руководство с примерами кода
- Освоение std::list в C++: синтаксис, функции и практические примеры
- Функции в C++: подробное объяснение с практическими примерами кода
- C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования