<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
list
jsou 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ímcofind
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říkladreverse
algoritmus obrátí pořadí prvků v rozsahu, zatímcoreverse_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