Контейнеры последовательностей: 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, если нет конкретной причины выбрать другой контейнер. Учитывай сложность операций и инвалидирование ссылок/итераторов при изменении контейнера.
