Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Контейнеры последовательностей: vector и другие

Страница 32 из 43 · 2026-10-25 · 1 мин чтения

Контейнеры последовательностей: vector и другие

std::vector

std::vector — основной контейнер для динамического массива. Он хранит элементы непрерывно в памяти и автоматически управляет выделением памяти.

#include <vector>std::vector<int> values{3, 6, 9};values.push_back(12);values.pop_back();values[0] = 100;

size() возвращает количество элементов, empty() проверяет пустоту, clear() удаляет все элементы. reserve(n) заранее резервирует ёмкость, но не меняет size().

Индексация и итераторы

operator[] не проверяет границы. at() проверяет. Добавление элемента в vector может перевыделить память, из-за чего указатели, ссылки и итераторы на элементы станут недействительными.

Другие последовательности

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

std::list не следует выбирать только потому, что «вставки быстрые»: из-за разрозненного размещения в памяти он часто проигрывает vector на практике. Выбирай по измерениям и требованиям.

Обход по ссылке

for (const auto& value : values) {    std::cout << value << '\n';}

Используй auto&, если элементы нужно изменять, и const auto&, если требуется только чтение. Для маленьких числовых значений копирование тоже может быть вполне уместным.

Итог

Начинай с std::vector, если нет конкретной причины выбрать другой контейнер. Учитывай сложность операций и инвалидирование ссылок/итераторов при изменении контейнера.