Hlavičkový soubor <algorithm> ze standardní knihovny C++ deklaruje různé funkce, které provádějí algoritmické operace na kontejnerech a posloupnostech reprezentovaných iterátory.ISO/IEC (2003). ISO/IEC 14882:2003(E): Programovací Jazyky - C++ §25 Algorithms library [lib.algorithms] para. 1 Několik málo algoritmů je také v hlavičkovém souboru <numeric>. Všechny algoritmy jsou ve jmenném prostoru .
Politiky provádění Jazyk C++ umožňuje stanovit politiku provádění (též zásady provádění, ), která umožňuje paralelní provádění algoritmů (pomocí vláken nebo instrukcí SIMD).
Existují čtyři různé politiky provádění s různou sémantikou určující, v jakém pořadí lze přistupovat k prvkům:
– provádění algoritmu musí probíhat ve stejném vlákně, jaké funkci volá, a přístup k prvkům musí být podle jejich pořadí; je to ekvivalentní volání funkce bez politiky provádění – provádění algoritmu může probíhat ve více vláknech, ale v rámci každého vlákna musí být přístup k prvkům prováděn postupně (tj. přístupy k prvkům se nesmí provádět současně) – provádění algoritmu může probíhat ve více vláknech, a přístupy k prvkům nemusí být v rámci jednoho vlákna prováděné podle jejich pořadí – provádění algoritmu musí probíhat v tom vlákně, které funkci volá, ale přístup k prvkům nemusí zachovávat jejich pořadí
Při používání politik, které mohou vést k provádění v různých vláknech, musí programátor zajistit, aby operace prováděné funkcemi byly vláknově bezpečné,
Rozsahy V C++20 byly přidány algoritmy, které místo dvojic iterátorů pracují s rozsahy. Tyto funkce umožňují použít dvojici iterátor-zarážka a jsou definovány ve jmenném prostoru . Tyto algoritmy nevyžadují, aby oba iterátory byly téhož typu a umožňují interoperabilitu s objekty deklarovanými v hlavičkovém souboru <ranges>, aniž by bylo nutné iterátory ručně extrahovat.
Operace s posloupnostmi bez jejich změny Kontrola predikátů Zjišťují, zda je zadaný predikát pravdivý pro nějakou část objektů v rozsahu, případně vrací počet objektů, pro které je predikát pravdivý:
– zadaný predikát je pravdivý pro všechny prvky v rozsahu – zadaný predikát je pravdivý alespoň pro jeden prvek v rozsahu – zadaný predikát není pravdivý pro žádný prvek v rozsahu – vrátí, kolikrát je zadaný prvek obsažen v rozsahu – vrací počet prvků v rozsahu, pro které je zadaný predikát pravdivý – zjišťuje, zda je zadaný prvek obsažen v rozsahu
Algoritmy porovnání Porovná zda dva rozsahy mají určitou vlastnost:
– najde první prvek, kterým se dva rozsahy liší – porovná, zda všechny prvky rozsahů jsou stejné – vrátí , pokud první rozsah je lexikograficky před druhým – vrátí logickou hodnotu, zda druhý zadaný rozsah je obsažen v prvním zadaném rozsahu
Vyhledávací algoritmy Najde v rozsahu první nebo poslední pozici, kde následující prvky vyhovují určitému predikátu
Binární vyhledávací algoritmy Poskytuje operace binárního vyhledávání pro rozsahy. Pro rozsahy, které nejsou setříděné, je výsledek nedefinovaný.
Algoritmy pro vyhledání minima/maxima Vyhledá v rozsahu nejmenší nebo největší prvek podle zadaného predikátu porovnání:
Algoritmy pro kontrolu vlastností Kontrolují, zda má celý rozsah určitou vlastnost:
Operace s posloupnostmi, které je mění
Kopírování Přenáší prvky z jednoho rozsahu do jiného
Partitioning algoritmy Přemísťuje prvky v rozsahu na místě tak, aby rozsah byl členěn podle určité vlastnosti:
Třídicí algoritmy Setřídí nebo částečně setřídí rozsah na místě:
Vytváření rozsahů Vytvoří daný rozsah bez čtení hodnot v něm obsažených:
Transformační algoritmy Transformuje každý prvek daného rozsahu na místě:
Algoritmy pro přerovnání Mění pořadí prvků v rozsahu na místě:
Heap algoritmy Poskytuje algoritmy pro práci s binární haldou – její vytvoření, vkládání prvků, a odstraňování prvků:
make_heap push_heap pop_heap sort_heap
Odkazy Reference
Externí odkazy C++ reference for standard algorithms
Kategorie:Standardní knihovna C++ Kategorie:Články s ukázkami kódu v C++