Подсчёт
Второй шаблон — подсчёт: сколько элементов удовлетворяют условию? Он похож на сложение, но вы прибавляете не значение, а 1, и только когда так решит if:
std::vector<int> temperatures = {18, 24, 27, 15, 31, 22, 29};
int hotDays = 0;
for (int temperature : temperatures) {
if (temperature >= 25) {
hotDays++;
}
}
std::cout << "Жарких дней: " << hotDays << std::endl;Жарких дней: 3Счётчик hotDays начинается с 0, перед циклом. Цикл смотрит на каждую температуру, а if решает, считать её или нет. hotDays++ выполняется только для 27, 31 и 29, поэтому в конце счётчик равен 3. Обратите внимание на две пары фигурных скобок: hotDays++ стоит в блоке if, а тот — в блоке цикла. Результат, как и раньше, выводится после цикла.
Подсчёт работает и с текстом. Этот цикл считает строчные буквы a (слово английское, потому что русская буква хранится в строке как два символа):
std::string word = "Abracadabra";
int count = 0;
for (char character : word) {
if (character == 'a') {
count++;
}
}
std::cout << "Количество a: " << count << std::endl;Количество a: 4Заглавная A в начале не считается: 'A' и 'a' — разные символы.
Один цикл может считать и несколько вещей сразу, каждую в своём счётчике. С if и else каждый элемент считается ровно один раз, в одном счётчике или в другом.
Задание
- 1
В векторе
scoresлежат баллы за контрольную. Чтобы сдать, нужно набрать 50 баллов или больше. Посчитайте тех, кто сдал: создайте переменнуюpassedсо значением0, пройдите поscoresциклом и за каждый балл, не меньший 50, увеличивайтеpassedна 1. После цикла выведите результат в видеСдали: 5. - 2
В том же цикле посчитайте тех, кто не сдал: перед циклом создайте переменную
failedсо значением0и увеличивайте её в веткеelse. После цикла выведитеНе справились: 3в следующей строке.