Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

22.6.1. Підрахунок кількості елементів

Одна з найпопулярніших операцій, яку можна виконати для будь-якої послідовності елементів, – підрахувати їх кількість. Для цього можна використовувати один з алгоритмів: count() або count_if(). Загальний формат цих алгоритмів має такий вигляд:

template <class InIter, class myType>

ptrdiff_t count(InIter start, InIter end, const myType &val);

template <class InIter, class UnPred>

ptrdiff_t count_if(InIter start, InIter end, UnPred pfn);

Алгоритм count() повертає кількість елементів, що дорівнює значенню val, у послідовності, межі якої задані параметрами start і end. Алгоритм count_if(), діючи у послідовності, межі якої задані параметрами start і end, повертає кількість елементів, для яких унарний предикат pfn повертає значення true. Тип ptrdiff_t визначається як деякий різновид цілочисельного типу.

Використання алгоритмів count() і count_if() продемонстровано у наведеному нижче коді програми.

Код програми 22.13. Демонстрація механізму використання алгоритмів count і count_if

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

#include <vector> // Для роботи контейнерним класом "Вектор"

#include <algorithm> // Для роботи з алгоритмами бібліотеки STL

#include <cctype> // Для роботи з символьними аргументами

using namespace std; // Використання стандартного простору імен

/* Це унарний предикат, який визначає,

чи представляє даний символ голосний звук. */

// а б в г д е є ж з и і ї й к л м н о п р c т у ф х ц ч ш щ ю я ь

bool isvowel(char ch) {

ch = tolower(ch);

if(ch=='а' || ch=='е' || ch=='є' || ch=='и'

|| ch=='і' || ch=='ї' || ch=='о' || ch=='у'

|| ch=='ю' || ch=='я') return true;

return false;

}

int main()

{

char str[] = "STL-програмування -- це сила!";

vector<char> vek;

unsigned int i;

for(i=0; str[i]; i++) vek.push_back(str[i]);

cout << "Послідовність: ";

for(i=0; i<vek.size(); i++) cout << vek[i];

cout << endl;

int n; char ch = 'н';

n = count(vek.begin(), vek.end(), ch);

cout << n << " символи '" << ch << "'\n";

n = count_if(vek. begin(), vek.end(), isvowel);

cout << n << " символів представляють голосні звуки.\n";

getch(); return 0;

}

У процесі виконання ця програма відображає на екрані такі результати:

Послідовність: STL-програмування -- це сила!

2 символи н

8 символів представляють голосні звуки.

Програма починається із створення вектора, який містить рядок "STL-програмування – це сила!". Потім використовується алгоритм count() для підрахунку кількості букв 'н' у цьому векторі. Після цього викликається алгоритм count_if(), який підраховує кількість символів, що представляють голосні звуки з використанням як предикату функції isvowel(). Звернемо Вашу увагу на те, як закодований цей предикат. Всі унарні предикати отримують як параметр об'єкт, тип якого збігається з типом елементів, що зберігаються у контейнері, для якого і створюється цей предикат. Предикат повинен повертати значення ІСТИНА або ФАЛЬШ.