Размер и последний элемент
Часто вы не знаете, сколько в векторе элементов. Может быть, его заполнила другая часть программы, а может, число элементов меняется, пока программа работает (добавлять и удалять элементы вы скоро научитесь). Вот как это узнать:
std::vector<std::string> students = {"Анна", "Борис", "Нина", "Давид", "Ева"};
std::cout << students.size() << std::endl;Программа выведет:
5size() — это метод: команда, которая принадлежит значению, здесь — вектору. Он пишется после имени переменной через точку. Такая запись называется точечной нотацией. Поэтому students.size() означает «размер вектора students». Использование метода называется его вызовом. После имени метода всегда стоят круглые скобки, даже если в них ничего нет. У векторов есть и другие методы, и несколько из них вы узнаете в этом уроке.
Метод size() возвращает число, поэтому его можно сохранить в переменной int, использовать в вычислениях или вывести с подписью:
int numberOfStudents = students.size();
std::cout << "Студентов: " << numberOfStudents << std::endl;Программа выведет:
Студентов: 5Если забыть скобки и написать int numberOfStudents = students.size;, программа не скомпилируется:
main.cpp:7:37: error: reference to non-static member function must be called; did you mean to call it with no arguments?В сообщении сказано, что метод нужно вызвать, и спрашивается, не хотели ли вы вызвать его с пустыми скобками. Просто добавьте ().
С помощью size() вы знаете, где находится последний элемент. Индексы начинаются с 0, поэтому последний индекс всегда на единицу меньше числа элементов: у вектора из 5 элементов индексы 0, 1, 2, 3 и 4. Значит, последний элемент находится по индексу students.size() - 1:
std::cout << students[students.size() - 1] << std::endl;Программа выведет:
ЕваСначала программа вычисляет индекс в квадратных скобках (5 − 1 = 4), а затем читает элемент с этим индексом. Так находится последний элемент вектора любой длины, даже если длина меняется. Частая ошибка — забыть - 1: students[students.size()] запрашивает индекс 5, где элемента нет. Что при этом случится, вы увидите в следующем упражнении.
Задание
- 1
С помощью
size()выведите число коллег с подписью. В выводе должна быть строкаКоллег: 3. - 2
Создайте переменную
lastColleagueтипаstd::stringи сохраните в ней последний элемент вектораcolleagues. Вычислите индекс с помощьюsize() - 1, не пишите число2. - 3
Выведите
lastColleagueс подписью:Последний: Лиза.