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
Основные методы
Метод | Действие |
| добавить в конец |
| удалить последний |
| количество элементов |
| пустой ли вектор |
| элемент с проверкой индекса |
| первый / последний |
| удалить все элементы |
#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] проверяет границы