Sdílet prostřednictvím


<algorithm>

Definuje funkce šablony kontejneru standardní knihovny C++, které provádějí algoritmy.

Syntaxe

(see links below for specific algorithm syntax)

Poznámka:

Knihovna <algorithm> také používá #include <initializer_list> příkaz.

Poznámky

Algoritmy standardní knihovny C++ můžou pracovat s různými datovými strukturami. Datové struktury, na kterých mohou pracovat, zahrnují nejen třídy kontejnerů standardní knihovny C++, jako vector listjsou a , ale také uživatelsky definované datové struktury a pole prvků, pokud splňují požadavky konkrétního algoritmu. Algoritmy standardní knihovny jazyka C++ dosahují této úrovně generality tím, že přistupují k prvkům kontejneru a procházejí je nepřímo prostřednictvím iterátorů.

Algoritmy standardní knihovny C++ zpracovávají rozsahy iterátoru, které jsou obvykle určeny jejich počátečními nebo koncovými pozicemi. Rozsahy, na které se odkazuje, musí být platné v tom smyslu, že všechny iterátory v rozsahech musí být odvozovatelné a v rámci sekvencí každé oblasti musí být poslední pozice dosažitelná od prvního zvýšením iterátoru.

Počínaje jazykem C++20 je většina algoritmů definovaných v <algorithm> jazyce C++20 k dispozici také ve formě, která přebírá range. Například místo volání můžete volat sort(v1.begin(), v1.end(), greater<int>());. ranges::sort(v1, greater<int>());

Algoritmy standardní knihovny C++ mohou současně pracovat s různými typy objektů kontejneru. K předávání informací o účelu algoritmů byly použity dvě přípony:

  • Přípona _if označuje, že algoritmus se používá s objekty funkcí, které pracují s hodnotami prvků, nikoli na samotných prvcích. Například algoritmus hledá prvky, find_if jejichž hodnoty splňují kritérium určené objektem funkce, zatímco find algoritmus hledá konkrétní hodnotu.

  • Přípona _copy indikuje, že algoritmus obecně upravuje zkopírované hodnoty místo kopírování upravených hodnot. Jinými slovy, neupravují prvky zdrojového rozsahu, ale výsledky zadají do výstupního rozsahu nebo iterátoru. Například reverse algoritmus obrátí pořadí prvků v rozsahu, zatímco reverse_copy algoritmus zkopíruje obrácený výsledek do cílového rozsahu.

Algoritmy standardní knihovny C++ se často klasifikují do skupin, které označují jejich účel nebo požadavky. Patří mezi ně úpravy algoritmů, které mění hodnotu prvků ve srovnání s neupravujícími algoritmy, které neměňují. Mutující algoritmy mění pořadí prvků, ale nikoli jejich hodnoty. Odebírající algoritmy mohou odstranit prvky z rozsahu nebo rozsah zkopírovat. Algoritmy řazení přeuspořádají prvky v rozsahu různými způsoby a algoritmy seřazeného rozsahu fungují pouze s oblastmi, jejichž prvky byly seřazeny určitým způsobem.

Číselné algoritmy standardní knihovny C++, které jsou k dispozici pro číselné zpracování, mají vlastní hlavičkový soubor <numeric>a objekty funkcí a adaptéry jsou definovány v hlavičce <functional>. Objekty funkce, které vracejí logické hodnoty, se označují jako predikáty. Výchozí binární predikát je porovnání operator<. Obecně platí, že seřazené prvky musí být menší než srovnatelné, takže vzhledem k jakýmkoli dvěma prvkům lze určit, že jsou ekvivalentní (v tom smyslu, že ani jeden není menší než druhý), nebo že jeden je menší než druhý. Výsledkem je řazení mezi neekvivalentními prvky.

Algoritmy

Název Popis
adjacent_find Vyhledá dva sousedící prvky, které jsou buď rovny, nebo splňují zadanou podmínku.
all_of Vrátí true , když je podmínka přítomna na každém prvku v daném rozsahu.
any_of Vrátí true , když je podmínka přítomna alespoň jednou v zadaném rozsahu prvků.
binary_search Ověřuje, zda v seřazeném rozsahu existuje prvek, který je roven zadané hodnotě nebo je jí ekvivalentní ve smyslu určeném binárním predikátem.
clamp
copy Přiřadí hodnoty prvků ze zdrojového rozsahu do cílového rozsahu a provede iterace přes zdrojové sekvence prvků a přiřadí je novým pozicím směrem dopředu.
copy_backward Přiřadí hodnoty prvků ze zdrojového rozsahu do cílového rozsahu a provede iterace přes zdrojové sekvence prvků a přiřadí je novým pozicím směrem dozadu.
copy_if Zkopírujte všechny prvky v daném rozsahu, které testuje true zadanou podmínku.
copy_n Zkopíruje zadaný počet prvků.
count Vrátí počet prvků v rozsahu, jejichž hodnoty odpovídají zadané hodnotě.
count_if Vrátí počet prvků v rozsahu, jejichž hodnoty odpovídají zadané podmínce.
equal Porovná dva rozsahy prvek podle prvku buď ke zjištění rovnosti, nebo ekvivalentnosti ve smyslu určeném binárním predikátem.
equal_range Najde dvojici pozic v seřazeném rozsahu. První bude menší nebo rovna pozici zadaného prvku a druhá větší než pozice prvku, kde smysl ekvivalence nebo řazení použitý k určení pozic v sekvenci může být určen binárním predikátem.
fill Každému prvku v zadaném rozsahu přiřadí stejnou novou hodnotu.
fill_n Přiřadí novou hodnotu zadanému počtu prvků v rozsahu, který začíná konkrétním prvkem.
find Vyhledá pozici prvního výskytu prvku v rozsahu, který má zadanou hodnotu.
find_end Vyhledá v rozsahu poslední dílčí sekvenci, která je shodná se zadanou sekvencí nebo která je ekvivalentní ve smyslu určeném binárním predikátem.
find_first_of Vyhledá první výskyt jedné z několika hodnot v cílovém rozsahu nebo první výskyt jednoho z několika prvků, které jsou ekvivalentní ve smyslu určeném binárním predikátem zadané sadě prvků.
find_if Vyhledá pozici prvního výskytu prvku v rozsahu, který splňuje zadanou podmínku.
find_if_not Vrátí první prvek v označené oblasti, která nesplňuje podmínku.
for_each Na každý prvek v pořadí dopředu v rozsahu použije zadaný objekt funkce a vrátí objekt funkce.
for_each_n
generate Přiřadí hodnoty generované objektem funkce každému prvku v rozsahu.
generate_n Přiřadí hodnoty vygenerované objektem funkce k zadanému počtu prvků v oblasti a vrátí se k pozici po poslední přiřazené hodnotě.
includes Ověřuje, zda jeden seřazený rozsah obsahuje všechny prvky obsažené ve druhém seřazeném rozsahu, kde kritérium pořadí nebo ekvivalence mezi prvky může být určeno binárním predikátem.
inplace_merge Kombinuje prvky ze dvou po sobě následujících seřazených rozsahů do jednoho seřazeného rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
is_heap Vrátí true , pokud prvky v zadané oblasti tvoří haldu.
is_heap_until Vrátí true , pokud zadaný rozsah tvoří haldu až do posledního prvku.
is_partitioned Vrátí true , pokud všechny prvky v daném rozsahu, které testuje true podmínku, přicházejí před všechny prvky, které testuje false.
is_permutation Určuje, zda prvky v daném rozsahu tvoří platnou permutaci.
is_sorted Vrátí true , pokud jsou prvky v zadaném rozsahu seřazené.
is_sorted_until Vrátí true , pokud jsou prvky v zadaném rozsahu seřazené.
iter_swap Vymění dvě hodnoty odkazované dvojicí zadaných iterátorů.
lexicographical_compare Porovná prvek po prvku mezi dvěma sekvencemi k určení, která z nich je menší.
lower_bound Najde pozici prvního prvku v seřazeném rozsahu, jehož hodnota je větší nebo rovna zadané hodnotě, kde kritérium pořadí může být určeno primárním predikátem.
make_heap Převede prvky ze zadaného rozsahu do haldy, ve které je první prvek největší a pro kterou může být kritérium řazení určeno binárním predikátem.
max Porovná dva objekty a vrátí větší z nich, kde kritérium pořadí může být určeno binárním predikátem.
max_element Vyhledá první výskyt největšího prvku v zadaném rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
merge Kombinuje všechny prvky ze dvou po sobě seřazených zdrojových rozsahů do jednoho seřazeného cílového rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
min Porovná dva objekty a vrátí menší z nich, kde kritérium pořadí může být určeno binárním predikátem.
min_element Vyhledá první výskyt nejmenšího prvku v zadaném rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
minmax Porovná dva vstupní parametry a vrátí je jako dvojici v pořadí od nejmenšího po největší.
minmax_element Provede práci provedenou jedním voláním min_element a max_element v jednom volání.
mismatch Porovná dva rozsahy prvek po prvku buď ke zjištění rovnosti, nebo ekvivalence ve smyslu určeném binárním predikátem a vyhledá první pozici, kde existuje rozdíl.
<alg> move Přesune prvky přidružené k určenému rozsahu.
move_backward Přesune prvky jednoho iterátoru do druhého. Pohyb začíná posledním prvkem v daném rozsahu a končí prvním prvkem v daném rozsahu.
next_permutation Znovu uspořádá prvky v rozsahu tak, aby původní pořadí bylo nahrazeno lexikograficky následující větší permutací, pokud existuje, kde význam následujícího může být určen binárním predikátem.
none_of Vrátí true , když podmínka není nikdy přítomna mezi prvky v daném rozsahu.
nth_element Rozdělí oblast prvků, správně lokaluje n.prveksekvence v oblasti tak, aby všechny prvky před ním byly menší nebo rovné a všechny prvky, které ho následují v sekvenci, jsou větší nebo rovny.
partial_sort Uspořádá zadaný počet menších prvků v rozsahu do nesestupného pořadí nebo podle setřiďovacího kritéria určeného binárním predikátem.
partial_sort_copy Zkopíruje prvky ze zdrojového rozsahu do cílového rozsahu, kde zdrojové prvky jsou seřazeny buď podle binárního predikátu „menší než“ nebo jiného určeného binárního predikátu.
partition Rozdělí prvky v rozsahu do dvou oddělených sad. Prvky, které splňují unární predikát, jsou umístěny před těmi, které jej nesplňují.
partition_copy Zkopíruje prvky, pro které je true podmínka do jednoho cíle a pro které je false podmínka na jinou. Prvky musí pocházet ze zadaného rozsahu.
partition_point Vrátí první prvek v daném rozsahu, který nesplňuje podmínku. Prvky jsou seřazené tak, aby ty, které splňují podmínku, přišly před ty, které nejsou.
pop_heap Odstraní největší prvek z přední části haldy až do předposlední pozice v rozsahu a ze zbývajících prvků vytvoří novou haldu.
prev_permutation Znovu uspořádá prvky v rozsahu tak, aby původní pořadí bylo nahrazeno lexikograficky následující větší permutací, pokud existuje, kde význam následujícího může být určen binárním predikátem.
push_heap Přidá prvek, který je na konci rozsahu, do stávající haldy, která zahrnuje předchozí prvky daného rozsahu.
random_shuffle Přeuspořádá sekvenci N prvků v rozsahu do jednoho z N! možných uspořádání vybraných náhodně.
remove Odstraní zadanou hodnotu z daného rozsahu bez narušení pořadí zbývajících prvků a vrácení konce nového rozsahu, který neobsahuje zadanou hodnotu.
remove_copy Zkopíruje prvky ze zdrojového rozsahu do cílového rozsahu, s výjimkou toho, že se prvky zadané hodnoty nekopírují, aniž by se rušily pořadí zbývajících prvků a vrátily konec nového cílového rozsahu.
remove_copy_if Zkopíruje prvky ze zdrojového rozsahu do cílového rozsahu, s výjimkou toho, že se nekopírují predikát, aniž by se rušily pořadí zbývajících prvků a vrátily konec nového cílového rozsahu.
remove_if Odstraní prvky, které splňují predikát, z daného rozsahu bez narušení pořadí zbývajících prvků a vrácení konce nového rozsahu, který neobsahuje zadanou hodnotu.
replace Zkontroluje každý prvek v rozsahu a nahradí jej, pokud odpovídá zadané hodnotě.
replace_copy Zkontroluje každý prvek ve zdrojovém rozsahu a nahradí jej, pokud při kopírování výsledku do nového cílového rozsahu odpovídá zadané hodnotě.
replace_copy_if Zkontroluje každý prvek ve zdrojovém rozsahu a nahradí jej, pokud při kopírování výsledku do nového cílového rozsahu splňuje zadaný predikát.
replace_if Zkontroluje každý prvek v rozsahu a nahradí jej, pokud splňuje zadaný predikát.
reverse Obrátí pořadí prvků v rozsahu.
reverse_copy Obrátí pořadí prvků ve zdrojovém rozsahu při kopírování do cílového rozsahu.
rotate Vymění prvky ve dvou sousedních rozsazích.
rotate_copy Vymění prvky ve dvou sousedních rozsazích v rámci zdrojového rozsahu a zkopíruje výsledek do cílového rozsahu.
sample
search Vyhledá první výskyt sekvence v cílovém rozsahu, jejíž prvky jsou rovné prvkům v dané sekvenci prvků nebo jejíž prvky jsou ekvivalentní ve smyslu určeném binárním predikátem prvkům v dané sekvenci.
search_n Vyhledá první dílčí sekvenci v rozsahu zadaného počtu prvků s konkrétní hodnotou nebo vztahem k dané hodnotě podle binárního predikátu.
set_difference Sjednotí všechny prvky, které patří do jednoho seřazeného zdrojového rozsahu, ale nikoli do druhého seřazeného zdrojového rozsahu, do jednoho seřazeného cílového rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
set_intersection Sjednotí všechny prvky, které náleží do obou seřazených zdrojových rozsahů, do jednoho seřazeného cílového rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
set_symmetric_difference Sjednotí všechny prvky, které náleží do jednoho, ale nikoli obou seřazených zdrojových rozsahů, do jednoho seřazeného cílového rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
set_union Sjednotí všechny prvky, které náleží alespoň do jednoho ze dvou seřazených zdrojových rozsahů, do jednoho seřazeného cílového rozsahu, kde kritérium pořadí může být určeno binárním predikátem.
sort Uspořádá prvky v zadaném rozsahu do nesestupného pořadí nebo podle setřiďovacího kritéria určeného binárním predikátem.
shuffle Shuffles (změna uspořádání) prvků pro daný rozsah pomocí generátoru náhodných čísel.
sort_heap Převede haldu na seřazený rozsah.
stable_partition Rozdělí prvky v rozsahu do dvou oddělených sad. Prvky, které splňují unární predikát, jsou umístěny před těmi, které jej nesplňují. Relativní pořadí ekvivalentních prvků je zachováno.
stable_sort Uspořádá prvky v zadaném rozsahu do nesestupného pořadí nebo podle setřiďovacího kritéria určeného binárním predikátem a zachová relativní pořadí ekvivalentních prvků.
swap Vymění hodnoty prvků mezi dvěma typy objektů, obsah prvního objektu přiřadí ke druhému objektu a obsah druhého k prvnímu objektu.
swap_ranges Vymění prvky z jednoho rozsahu za prvky druhého rozsahu o stejné velikosti.
transform Aplikuje zadaný objekt funkce na každý prvek ve zdrojovém rozsahu nebo na dvojici prvků ze dvou zdrojových rozsahů a zkopíruje vrácené hodnoty objektu funkce do cílového rozsahu.
unique Odebere duplicitní prvky, které jsou vedle sebe v zadaném rozsahu.
unique_copy Zkopíruje prvky ze zdrojového rozsahu do cílového rozsahu s výjimkou duplicitních prvků, které jsou vedle sebe.
upper_bound Najde pozici prvního prvku v seřazeném rozsahu, který má hodnotu větší než zadaná hodnota, kde kritérium pořadí může být určeno binárním predikátem.

Viz také

Referenční informace k souborům hlaviček
Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace