Sekvenční algoritmy “all_of”, “any_of” a “none_of”
C++ 11

image_printTisk

V tomto článku si popíšeme sekvenční algoritmy all_of, any_of a none_of. Jejich princip spočívá v tom, že se jim v argumentu předá testovací operace, reprezentovaná nejčastěji lambda výrazem, na kterou je aplikován každý prvek datové struktury v rozsahu daném předanými iterátory. Dle typu algoritmu je pak vrácen příslušný výsledek vyjádřený logickou hodnotou.

Algoritmus all_of

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> data = { 1, 2, 3, 4, 5, 6, 7 , 8, 9, 10 };
    
    bool result1 = all_of(data.begin(), data.end(), [](int n) { return n > 5; });
    bool result2 = all_of(data.begin(), data.end(), [](int n) { return n < 100; });
    
    cout << boolalpha;
    cout << "Jsou všechna čísla > 5: " << result1 << endl;
    cout << "Jsou všechna čísla < 100: " << result2 << endl;

    return 0;
}
Unable to connect to the JDoodle service.

Algoritmus any_of

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    vector<int> data = { 1, 2, 3, 4, 5, 6, 7 , 8, 9, 10 };
    
    bool result1 = any_of(data.begin(), data.end(), [](int n) { return n % 3 == 0; });
    bool result2 = any_of(data.begin(), data.end(), [](int n) { return n % 11 == 0; });
    
    cout << boolalpha;
    cout << "Je nějaké číslo dělitelné číslem 3: " << result1 << endl;
    cout << "Je nějaké číslo dělitelné číslem 11: " << result2 << endl;
    return 0;
}
Unable to connect to the JDoodle service.

Algoritmus none_of

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    vector<int> data = { 1, 2, 3, 4, 5, 6, 7 , 8, 9, 10 };
    
    bool result1 = none_of(data.begin(), data.end(), [](int n) { return n > 5; });
    bool result2 = none_of(data.begin(), data.end(), [](int n) { return n > 100; });
    
    cout << boolalpha;
    cout << "Není žádné číslo > 5: " << result1 << endl;
    cout << "Není žádné číslo > 100: " << result2 << endl;
    return 0;
}
Unable to connect to the JDoodle service.

Shrnutí

  • Algoritmus all_of vrací kladnou logickou hodnotu jen v případě, že daná operace představující nějaký predikát je kladná pro všechny prvky v daném rozsahu hodnot. Jedná se v podstatě o implementaci univerzálního kvantifikátoru z matematické logiky.
  • Algoritmus any_of vrací kladnou hodnotu true, pokud je předaný predikát splněn alespoň pro jeden prvek. Tento algoritmus implementuje existenční kvantifikátor z matematické logiky.
  • Algoritmus none_of vrací kladnou hodnotu jen v případě, že předaný predikát vyhodnotí všechny prvky záporným způsobem.
image_printTisk
Sekvenční algoritmy “all_of”, “any_of” a “none_of”
C++ 11
Ohodnoťte tento článek

Související články

  • Úvod do algoritmů STL Úvod Co jsou algoritmy STL - operace nad datovými strukturami STL Jak fungují? Vazba přes iterátory Není přímý přístup do datové struktury kvůli abstrakci od její […]
  • Varianty sekvenčního algoritmu “find” Tento článek pojednává o sekvenčních vyhledávacích algoritmech knihovny STL. Ukážeme si algoritmus pro hledání na základě hodnoty nebo za pomocí predikátu. Další možností je také hledání […]
  • Metody vracení hodnot z funkce DO POKROČILÝCH ASI Tento článek pojednává o způsobech vracení hodnot z funkcí. Jsou to stejné způsoby, o kterých je psáno ve článku předchozím, tedy vracení hodnotou nebo vracení […]
  • Šablony funkcí I Tímto článkem si představíme nový pojem, a to je generické programování v C++. Jedná se o způsob programování, jehož základní znalost je nutná pro použití jedné z nejdůležitějších knihoven […]
  • Cykly v C++ V tomto článku si popíšeme tří základní typy cyklů v jazyce C++ a vše si ukážeme na jednoduchém příkladu součtu čísel z posloupnosti 1..10. V závěru kapitoly pak budou vysvětleny dva […]
  • Šablony funkcí II V tomto článku dokončíme výklad o šablonách funkcí. Zmíníme se o tom, že šablony mohou obsahovat kromě parametrů reprezentujících datové typy také celočíselné hodnoty a dále si představíme […]