2.3. Подсчет
Алгоритм count подсчитывает, какое количество элементов последовательности равно заданному значению. Давайте используем этот алгоритм для того, чтобы подсчитать, сколько раз в строке встречается буква е.
// count_e.cpp: Подсчет количества букв 'е'. • #include <iostream> #include <string> #include <algorithm> using namespace std;
int main() // Для ВС 5.2 требуются изменения (см. ниже) { char *p =
"This demonstrates the Standard Template Library";
int n = countfp, p + strlen(p), 'e');
cout « n « " occurrences of 'e' found.\n";
return 0; }
В изначальной версии STL алгоритм count не возвращал значение, а использовал четвертый параметр, который увеличивался на найденную величину. Это по-прежнему так для ВС 5.2.
Следующая программа подсчитывает, сколько символов из множества {'а', 'ё, 7, 'о, 'и'} (так называемые гласные) встречаются в заданной строке.
// countvwl.cpp: Сосчитать, сколько раз гласные
// а, е, i, о, и встречаются в заданной строке
// (первая версия).
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() { char *p =
"This demonstrates the Standard Template Library", *q = p + strlen(p); int n = countfp, q, 'a') + countfp, q, 'e') + countfp, q, 'i') + countfp, q, 'o') + count(p, q, 'u'); cout « n « " vowels (a, e, i, o, u) found.\n";
// n = 13 return 0; }
К сожалению, этот подход не слишком эффективен, так как заданная строка сканируется пять раз, а мы бы предпочли один проход. Это достигается с помощью алгоритма count_if, которому можно передать функцию, определяющую, удовлетворяется ли требуемое условие. Число параметров функции count if недавно уменьшилось на один, точно так же, как и у count.
// countvw2.срр: Сосчитать, сколько раз гласные
// а, е, i, о, и встречаются в заданной строке
// (улучшенная версия).
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool found(char ch)
{ return ch == 'a' II ch == 'e' II ch == ' i' II
ch == 'o' II ch == 'u'; }
int main() { char *p =
"This demonstrates the Standard Template Library"; int n = count_if(p, p + strlen(p), found); cout « n « " vowels (a, e, i, o, u) found.\n";
// n = 13 return 0; }
<< назад вперед >>