Основы std::vector: push_back, size, capacity
Создавайте, расширяйте и проверяйте векторы, а также разбирайтесь в различии между capacity и size.
«Основы std::vector: push_back, size, capacity» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Почему std::vector?
std::vector — контейнер по умолчанию в C++. Он автоматически увеличивается, самостоятельно управляет памятью и обеспечивает произвольный доступ за O(1). Используйте его, если у Вас нет особой причины поступить иначе.
Подключение и объявление
Подключите <vector> и объявите вектор, указав тип элемента в качестве параметра шаблона.
#include <vector>
std::vector<int> nums;
std::vector<std::string> names = {"Ada", "Bob"};Способы инициализации
Есть несколько способов создать вектор:
std::vector<int> a; // empty
std::vector<int> b(5); // 5 zeros
std::vector<int> c(5, 42); // 5 copies of 42
std::vector<int> d{1, 2, 3}; // {1,2,3}
std::vector<int> e(d); // copy of dpush_back: добавление в конец
Добавьте элемент в конец с помощью push_back. Амортизированная сложность — O(1).
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);emplace_back: конструирование на месте
emplace_back передаёт свои аргументы конструктору элемента, не создавая временный объект. Для нетривиальных типов это немного быстрее.
std::vector<std::pair<int,int>> v;
v.emplace_back(1, 2); // constructs a pair in placesize и capacity
Это два разных понятия:
- size — количество элементов, хранящихся в данный момент
- capacity — количество элементов, которое хранилище может вместить без перераспределения памяти
capacity увеличивается блоками, обычно вдвое.
Проверка size и capacity
Используйте соответствующие функции-члены:
std::vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i);
std::cout << "size=" << v.size() << " capacity=" << v.capacity() << "\n";
}reserve: предварительное выделение памяти
Если Вы знаете, сколько элементов добавите, сначала вызовите reserve, чтобы избежать повторных перераспределений памяти.
std::vector<int> v;
v.reserve(1000000); // preallocate
for (int i = 0; i < 1000000; ++i) v.push_back(i);shrink_to_fit: освобождение памяти
После удаления большого количества элементов освободите неиспользуемую ёмкость с помощью shrink_to_fit. Это необязательная рекомендация: реализация может сохранить дополнительное пространство.
Доступ к элементам
Есть четыре способа:
v[i]— без проверки границv.at(i)— с проверкой границ, при ошибке создаёт исключениеv.front()— первый элементv.back()— последний элемент
Пустой вектор и очистка
Проверяйте, пуст ли вектор, с помощью empty(). Удаляйте все элементы с помощью clear() — capacity не изменяется.
Быстрая проверка
Почему время выполнения push_back амортизированно равно O(1)?
Итоги
std::vector — это динамически растущий массив с произвольным доступом за O(1). size() — количество элементов, а capacity() — объём выделенного хранилища. reserve() предотвращает перераспределение памяти, если известен окончательный размер.
Часто задаваемые вопросы
Урок «Основы std::vector: push_back, size, capacity» бесплатный?
Да — полный текст урока «Основы std::vector: push_back, size, capacity» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы std::vector: push_back, size, capacity»?
Создавайте, расширяйте и проверяйте векторы, а также разбирайтесь в различии между capacity и size. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Основы std::vector: push_back, size, capacity»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы std::vector: push_back, size, capacity
- Перебор векторов: индекс, range-for, итераторы
- Изменение векторов: insert, erase, clear
- Вектор, std::array и массив C