Создание вектора
В уроке об условиях вы узнали, как программа принимает решения. В этом уроке вы научитесь хранить вместе несколько значений.
Представьте, что вы хотите сохранить свои оценки за пять контрольных работ. С тем, что вы знаете сейчас, понадобилось бы пять переменных:
int score1 = 85;
int score2 = 92;
int score3 = 78;
int score4 = 90;
int score5 = 88;Это много писать. А что, если будет шестая контрольная? Для каждой новой оценки пришлось бы создавать новую переменную. Для этого и нужен вектор. Вектор хранит несколько значений одного типа в одной переменной:
std::vector<int> scores = {85, 92, 78, 90, 88};Значения в векторе называются его элементами. В этом векторе пять элементов, и их порядок важен: 85 — первый элемент, 88 — последний.
Разберём запись слева направо:
std::vectorговорит, что вы создаёте вектор. Он входит в стандартную библиотеку, как иstd::coutсstd::string, поэтому начинается сstd::.- В угловых скобках
< >стоит тип данных элементов.std::vector<int>— вектор целых чисел,std::vector<double>— вектор дробных чисел, аstd::vector<std::string>— вектор строк. scores— имя переменной. К нему применимы те же правила, что и к именам других переменных.- В фигурных скобках
{ }стоят элементы, разделённые запятыми.
Чтобы пользоваться векторами, напишите в начале программы #include <vector>, как #include <string> для строк. Иногда программа работает и без него, потому что векторы подключает другой #include. Не полагайтесь на это и всегда пишите его.
Ещё примеры:
std::vector<std::string> names = {"Анна", "Борис", "Нина"};
std::vector<double> prices = {29.9, 149.9, 99.9};
std::vector<int> points;В векторе points нет элементов, он пустой. В отличие от переменной int без начального значения, в нём нет никаких случайных значений. Просто пока ничего нет. Добавлять элементы в вектор вы научитесь позже в этом уроке.
Все элементы должны иметь тип, записанный в угловых скобках. Если положить дробное число в вектор целых, программа не скомпилируется:
std::vector<int> scores = {85, 92.5, 78};main.cpp:6:36: error: type 'double' cannot be narrowed to 'value_type' (aka 'int') in initializer list [-Wc++11-narrowing]В сообщении сказано, что значение типа double нельзя сузить до типа элементов вектора (value_type), то есть до int. Дробная часть пропала бы, поэтому C++ сообщает об ошибке. Название в квадратных скобках в конце сообщения можно игнорировать.
Весь вектор сразу вывести нельзя, только по элементам. Чтобы вывести элемент, напишите его номер в квадратных скобках после имени вектора. names[0] — первый элемент вектора names:
std::cout << names[0] << std::endl;Программа выведет:
АннаПочему счёт начинается с нуля, вы узнаете в следующем упражнении. Программа в редакторе выводит первого коллегу точно так же.
Задание
- 1
Под комментарием создайте вектор целых чисел с именем
scoresи элементами85,92,78и90в таком порядке. - 2
Под вектором выведите первую оценку с подписью, так же, как программа выводит первого коллегу. В выводе должна быть строка
Первая оценка: 85.