std::vector в C++

std::vector в C++: динамический массив, добавление и удаление элементов, перебор, размер и зарезервированная ёмкость.

std::vector — самый используемый контейнер STL. Это массив, который автоматически растёт при добавлении элементов. Заменяет ручное управление динамическими массивами.

Создание и добавление

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v;        // пустой вектор целых

    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    std::cout << "Размер: " << v.size() << "\n";
    std::cout << "Первый: " << v[0] << "\n";
    std::cout << "Последний: " << v.back() << "\n";
    return 0;
}

Вывод:

Размер: 3
Первый: 10
Последний: 30

Основные методы

Метод

Действие

push_back(x)

добавить в конец

pop_back()

удалить последний

size()

количество элементов

empty()

пустой ли вектор

at(i)

элемент с проверкой индекса

front() / back()

первый / последний

clear()

удалить все элементы

#include <iostream>
#include <vector>

int main() {
    std::vector<std::string> names = {"Аня", "Боря", "Вика"};

    names.push_back("Гена");
    names.pop_back();              // удалили "Гена"

    for (const std::string& name : names) {
        std::cout << name << "\n";
    }
    std::cout << "Итого: " << names.size() << "\n";
    return 0;
}

Вывод:

Аня
Боря
Вика
Итого: 3

Инициализация и resize

#include <iostream>
#include <vector>

int main() {
    std::vector<int> zeros(5, 0);    // 5 нулей
    std::vector<int> seq = {1, 2, 3, 4, 5};

    seq.resize(3);   // усекли до 3 элементов
    for (int x : seq) std::cout << x << " ";
    std::cout << "\n";
    return 0;
}

Вывод:

1 2 3 

v[i] не проверяет границы — если индекс выходит за размер, поведение не определено. v.at(i) выбросит исключение std::out_of_range. При отладке лучше использовать at().

Коротко

  • std::vector<T> — динамический массив; подключается через #include <vector>.
  • push_back добавляет в конец; pop_back удаляет; size() — размер.
  • Перебор range-based for: for (const T& x : v) — быстро и безопасно.
  • at(i) — с проверкой индекса; v[i] — без (быстрее, но опаснее).
Проверьте себя
1. Чем std::vector отличается от обычного массива?
AВектор меняет размер динамически
BВектор хранит только строки
CВектор не поддерживает индексацию
DВектор всегда медленнее
2. Какой метод добавляет элемент в конец вектора?
Apush_back()
Bappend()
Cadd()
Dinsert()
3. Чем v.at(i) отличается от v[i]?
AНет разницы
Bat() работает быстрее
Cat() проверяет границы и бросает исключение при выходе
Dv[i] проверяет границы