Векторы

Обычный массив имеет размер, заданный заранее. Иногда количество значений заранее неизвестно: пользователь вводит несколько измерений, программа собирает данные испытания или список команд растёт по мере настройки. Для этого в C++ есть vector.
vector — контейнер стандартной библиотеки, похожий на массив с изменяемым размером. Для него подключают библиотеку <vector>. В этом уроке изучаем только простые операции: создать, добавить, узнать размер, прочитать и изменить элемент.
Первый вектор
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
a.push_back(10);
a.push_back(20);
a.push_back(30);
cout << a[0] << endl;
cout << a[1] << endl;
cout << a[2] << endl;
return 0;
}
Вывод:
10
20
30
push_back добавляет новое значение в конец. После трёх добавлений вектор хранит три элемента с индексами 0, 1, 2.
Размер вектора
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
cout << a.size() << endl;
a.push_back(5);
cout << a.size() << endl;
a.push_back(8);
cout << a.size() << endl;
return 0;
}
Вывод:
0
1
2
size() показывает, сколько элементов сейчас хранится в векторе.
Изменение элемента
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
a.push_back(10);
a.push_back(20);
a[1] = 99;
cout << a[0] << endl;
cout << a[1] << endl;
return 0;
}
Элемент вектора читается и изменяется почти так же, как элемент массива.
Массив или вектор
| Ситуация | Что выбрать |
|---|---|
| всегда ровно 3 значения | массив |
| размер известен до запуска | массив |
| значения добавляются во время работы | vector |
| нужно часто менять количество элементов | vector |
В маленькой программе разница не всегда важна. В реальном проекте выбор контейнера влияет на память и скорость, особенно на микроконтроллере.
Осторожно с индексами
vector тоже начинается с индекса 0. Если в векторе три элемента, индекс 3 запрещён.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
a.push_back(10);
cout << a[0] << endl;
return 0;
}
Перед чтением элемента убедитесь, что он уже добавлен. Пустой вектор не имеет элемента a[0].
Что пока не делаем
В этом уроке не используем перебор вектора в цикле. Циклы будут изучены позже. После урока про циклы мы вернёмся к обработке наборов значений по счётчику.
Практика
- Создайте пустой
vector<int>. - Добавьте в него три числа через
push_back. - Выведите размер после каждого добавления.
- Измените второй элемент и выведите его.
- Объясните, чем вектор отличается от массива.
Проверьте себя
- Какую библиотеку нужно подключить для
vector? - Что делает
push_back? - Что показывает
size()? - С какого индекса начинается вектор?
- Почему нельзя читать
a[0]у пустого вектора?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
| Термин | Значение |
|---|---|
| контейнер | объект для хранения набора значений |
vector | контейнер изменяемого размера |
push_back | добавление элемента в конец |
size | текущее количество элементов |
| индекс | номер элемента |
Связанные темы
- Массивы — фиксированный набор элементов.
- Циклы — обработка элементов по счётчику.
- Динамические массивы — ручное выделение памяти.
Источники
- C++ Working Draft. Vector: https://eel.is/c++draft/vector
- Microsoft Learn.
vectorclass: https://learn.microsoft.com/en-us/cpp/standard-library/vector-class