<algorithm>
Definiuje funkcje szablonu kontenera biblioteki standardowej języka C++, które wykonują algorytmy.
Składnia
(see links below for specific algorithm syntax)
Uwaga
Biblioteka <algorithm>
używa również instrukcji #include <initializer_list>
.
Uwagi
Algorytmy standardowej biblioteki języka C++ mogą działać na różnych strukturach danych. Struktury danych, na których mogą działać, obejmują nie tylko klasy kontenerów biblioteki standardowej języka C++, takie jak vector
i list
, ale także struktury danych zdefiniowane przez użytkownika i tablice elementów, o ile spełniają wymagania określonego algorytmu. Algorytmy standardowej biblioteki języka C++ osiągną ten poziom uogólnienia przez uzyskiwanie dostępu do elementów kontenera i przechodzenie przez nie pośrednio za pośrednictwem iteratorów.
Algorytmy standardowej biblioteki języka C++ przetwarzają zakresy iteracyjne, które są zwykle określane przez ich pozycje początkowe lub końcowe. Zakresy, o których mowa, muszą być prawidłowe w sensie, że wszystkie iteratory w zakresach muszą być wyłuszczalne, a w ramach sekwencji każdego zakresu ostatnia pozycja musi być osiągalna od pierwszego przez zwiększanie iteratora.
Począwszy od języka C++20, większość algorytmów zdefiniowanych w <algorithm>
pliku jest również dostępna w postaci, która przyjmuje range
wartość . Na przykład zamiast wywoływać sort(v1.begin(), v1.end(), greater<int>());
metodę , możesz wywołać metodę . ranges::sort(v1, greater<int>());
Algorytmy standardowej biblioteki języka C++ mogą pracować z różnymi typami obiektów kontenera w tym samym czasie. Dwa sufiksy zostały użyte do przekazywania informacji o celu algorytmów:
Sufiks
_if
wskazuje, że algorytm jest używany z obiektami funkcji, które działają na wartości elementów, a nie na samych elementach. Na przykładfind_if
algorytm wyszukuje elementy, których wartości spełniają kryterium określone przez obiekt funkcji, podczas gdyfind
algorytm wyszukuje określoną wartość.Sufiks
_copy
wskazuje, że algorytm zazwyczaj modyfikuje skopiowane wartości, a nie kopiuje zmodyfikowane wartości. Innymi słowy, nie modyfikują elementów zakresu źródłowego, ale umieszczają wyniki w zakresie danych wyjściowych/iteratorze. Na przykładreverse
algorytm odwraca kolejność elementów w zakresie, natomiastreverse_copy
algorytm kopiuje odwrócony wynik do zakresu docelowego.
Algorytmy standardowej biblioteki języka C++ są często klasyfikowane w grupach, aby wskazać ich przeznaczenie lub wymagania. Obejmują one modyfikowanie algorytmów, które zmieniają wartość elementów w porównaniu z algorytmami, które nie modyfikują. Algorytmy mutujące zmieniają kolejność elementów, ale nie ich wartości. Algorytmy usuwające mogą wyeliminować elementy z zakresu lub kopii zakresu. Algorytmy sortowania zmieniają kolejność elementów w zakresie na różne sposoby i sortowane algorytmy zakresu działają tylko na zakresy, których elementy zostały posortowane w określony sposób.
Algorytmy liczbowe biblioteki standardowej języka C++ udostępniane do przetwarzania liczbowego mają własny plik <numeric>
nagłówka , a obiekty i adaptery funkcji są definiowane w nagłówku <functional>
. Obiekty funkcji zwracające wartości logiczne są nazywane predykatami. Domyślny predykat binarny to porównanie operator<
. Ogólnie rzecz biorąc, uporządkowane elementy muszą być mniejsze niż porównywalne, tak aby, biorąc pod uwagę dwa elementy, można określić, że są one równoważne (w sensie, że żadna z nich nie jest mniejsza niż druga) lub że jeden jest mniejszy niż drugi. Skutkuje to ustaleniem kolejności elementów nierównoważnych.
Algorytmy
Nazwa/nazwisko | opis |
---|---|
adjacent_find |
Wyszukuje dwa sąsiadujące elementy, które są równe lub spełniają określony warunek. |
all_of |
Zwraca wartość true , gdy warunek jest obecny w każdym elemecie w danym zakresie. |
any_of |
Zwraca wartość true , gdy warunek występuje co najmniej raz w określonym zakresie elementów. |
binary_search |
Testuje, czy w sortowanym zakresie istnieje element, który jest równy określonej wartości lub który jest odpowiednikiem w sensie określonym przez predykat binarny. |
clamp |
|
copy |
Przypisuje wartości elementów z zakresu źródłowego do zakresu docelowego, iterując przez sekwencję źródłową elementów oraz przypisując im nowe pozycje w kierunku do przodu. |
copy_backward |
Przypisuje wartości elementów z zakresu źródłowego do zakresu docelowego, iterując przez sekwencję źródłową elementów oraz przypisując im nowe pozycje w kierunku do tyłu. |
copy_if |
Skopiuj wszystkie elementy w danym zakresie, które testuje true określony warunek |
copy_n |
Kopiuje określoną liczbę elementów. |
count |
Zwraca liczbę elementów w zakresie, których wartości pasują do określonej wartości. |
count_if |
Zwraca liczbę elementów w zakresie, których wartości pasują do określonego warunku. |
equal |
Porównuje dwa zakresy element po elemencie, pod względem równości lub równoważności w sensie określonym przez predykat binarny. |
equal_range |
Wyszukuje parę pozycji w uporządkowanym zakresie, pierwszą mniejszą lub równoważną położeniu określonego elementu, a drugą większą niż pozycja elementu, gdzie sens równoważności lub szeregowania używany do ustanawiania pozycji w sekwencji może zostać określony przez predykat binarny. |
fill |
Przypisuje tę samą nową wartość każdemu elementowi w określonym zakresie. |
fill_n |
Przypisuje nową wartość określonej liczbie elementów z zakresu, począwszy od konkretnego elementu. |
find |
Lokalizuje pozycję pierwszego wystąpienia elementu w zakresie, który ma określoną wartość. |
find_end |
Wyszukuje w zakresie ostatnią podsekwencję, która jest identyczna z określoną sekwencją lub jest równoważna w sensie określonym przez predykat binarny. |
find_first_of |
Wyszukuje pierwsze wystąpienie którejś z kilku wartości w zakresie docelowym lub pierwsze wystąpienie któregoś z kilku elementów, które są równoważne w sensie określonym przez predykat binarny dla określonego zestawu elementów. |
find_if |
Lokalizuje pozycję pierwszego wystąpienia elementu w zakresie, który spełnia określony warunek. |
find_if_not |
Zwraca pierwszy element w wskazanym zakresie, który nie spełnia warunku. |
for_each |
Stosuje określony obiekt funkcji do każdego elementu w kolejności do przodu w zakresie i zwraca obiekt funkcji. |
for_each_n |
|
generate |
Przypisuje wartości generowane przez obiekt funkcji do każdego elementu w zakresie. |
generate_n |
Przypisuje wartości generowane przez obiekt funkcji do określonej liczby elementów w zakresie i wraca do pozycji z jedną przeszłości ostatnią przypisaną wartością. |
includes |
Sprawdza, czy jeden posortowany zakres zawiera wszystkie elementy zawarte w drugim posortowanym zakresie, gdzie kryterium szeregowania lub równoważności między elementami może zostać określone przez predykat binarny. |
inplace_merge |
Łączy elementy z dwóch następujących po sobie posortowanych zakresów w pojedynczy posortowany zakres, gdzie kryterium szeregowania może być określone przez predykat binarny. |
is_heap |
Zwraca wartość true , jeśli elementy w określonym zakresie tworzą stertę. |
is_heap_until |
Zwraca wartość true , jeśli określony zakres tworzy stertę do ostatniego elementu. |
is_partitioned |
Zwraca wartość true , jeśli wszystkie elementy w danym zakresie, które testuje true warunek, pochodzą przed wszystkimi elementami testowymi false . |
is_permutation |
Określa, czy elementy w danym zakresie tworzą prawidłową permutację. |
is_sorted |
Zwraca wartość true , jeśli elementy w określonym zakresie są w kolejności sortowania. |
is_sorted_until |
Zwraca wartość true , jeśli elementy w określonym zakresie są w kolejności sortowania. |
iter_swap |
Wymienia dwie wartości, do których odnosi się para określonych iteratorów. |
lexicographical_compare |
Porównuje dwie sekwencje element po elemencie, aby określić, która z nich jest mniejsza. |
lower_bound |
Znajduje pozycję pierwszego elementu w uporządkowanym zakresie, który ma wartość większą niż lub równoważną określonej wartości, gdzie kryterium szeregowania może być określone przez predykat binarny. |
make_heap |
Konwertuje elementy z określonego zakresu na stertę, w której pierwszy element jest największy i dla której kryterium sortowania może być określone przez predykat binarny. |
max |
Porównuje dwa obiekty i zwraca większy z nich, gdzie kryterium sortowania może być określone przez predykat binarny. |
max_element |
Znajduje pierwsze wystąpienie największego elementu w określonym zakresie, gdzie kryterium sortowania może być określone przez predykat binarny. |
merge |
Łączy wszystkie elementy z dwóch następujących po sobie posortowanych zakresów źródłowych w pojedynczy posortowany zakres docelowy, gdzie kryterium szeregowania może być określone przez predykat binarny. |
min |
Porównuje dwa obiekty i zwraca mniejszy z nich, gdzie kryterium sortowania może być określone przez predykat binarny. |
min_element |
Znajduje pierwsze wystąpienie najmniejszego elementu w określonym zakresie, gdzie kryterium sortowania może być określone przez predykat binarny. |
minmax |
Porównuje dwa parametry wejściowe i zwraca je jako parę w kolejności od najmniejszego do największego. |
minmax_element |
Wykonuje pracę wykonywaną przez min_element polecenie i max_element w jednym wywołaniu. |
mismatch |
Porównuje dwa zakresy element po elemencie pod względem równości lub odpowiedniości w sensie określonym przez predykat binarny i lokalizuje pierwsze miejsce, w którym występuje różnica. |
<alg> move |
Przenieś elementy związane z określonym zakresem. |
move_backward |
Przenosi elementy jednego iteratora do drugiego. Przeniesienie rozpoczyna się od ostatniego elementu w określonym zakresie, a kończy się na pierwszym elemencie w tym zakresie. |
next_permutation |
Zmienia kolejność elementów w zakresie, tak że oryginalna kolejność jest zastąpiona przez leksykograficznie kolejną większą permutację, o ile takowa istnieje, gdzie sens „kolejna” może być określony przez predykat binarny. |
none_of |
Zwraca wartość true , gdy warunek nigdy nie występuje wśród elementów w danym zakresie. |
nth_element |
Partycjonuje zakres elementów, poprawnie lokalizując nelementu sekwencji w zakresie, tak aby wszystkie elementy przed nim są mniejsze lub równe, a wszystkie elementy, które następują po niej w sekwencji, są większe lub równe. |
partial_sort |
Rozmieszcza określoną liczbę mniejszych elementów w zakresie w niemalejącej kolejności, lub według kryteriów sortowania określonych przez binarny predykat. |
partial_sort_copy |
Kopiuje elementy z zakresu źródłowego do zakresu docelowego, gdzie elementy źródłowe są uporządkowane według albo zasady mniejszy niż, albo innego określonego predykatu binarnego. |
partition |
Klasyfikuje elementy w zakresie na dwa rozłączne zestawy, z elementami spełniającymi predykat unarny poprzedzającymi te, które go nie spełniają. |
partition_copy |
Kopiuje elementy, dla których warunek to true jedno miejsce docelowe, i dla którego warunek jest false inny. Elementy muszą pochodzić z określonego zakresu. |
partition_point |
Zwraca pierwszy element w danym zakresie, który nie spełnia warunku. Elementy są sortowane tak, aby te, które spełniają warunek, pochodzą przed tymi, które nie. |
pop_heap |
Usuwa największy element z przodu sterty do przedostatniej pozycji w zakresie, a następnie tworzy nową stertę z pozostałych elementów. |
prev_permutation |
Zmienia kolejność elementów w zakresie, tak że oryginalna kolejność jest zastąpiona przez leksykograficznie kolejną większą permutację, o ile takowa istnieje, gdzie sens „kolejna” może być określony przez predykat binarny. |
push_heap |
Dodaje element znajdujący się na końcu zakresu do istniejącej sterty, która składa się z poprzednich elementów w zakresie. |
random_shuffle |
Zmienia kolejność elementów N w zakresie w jeden z N! możliwe ustalenia wybrane losowo. |
remove |
Eliminuje określoną wartość z danego zakresu bez zakłócania kolejności pozostałych elementów i zwracania końca nowego zakresu wolnego od określonej wartości. |
remove_copy |
Kopiuje elementy z zakresu źródłowego do zakresu docelowego, z tą różnicą, że elementy określonej wartości nie są kopiowane, bez zakłócania kolejności pozostałych elementów i zwracania końca nowego zakresu docelowego. |
remove_copy_if |
Kopiuje elementy z zakresu źródłowego do zakresu docelowego, z tą różnicą, że spełnianie predykatu nie jest kopiowane, bez zakłócania kolejności pozostałych elementów i zwracania końca nowego zakresu docelowego. |
remove_if |
Eliminuje elementy, które spełniają predykat, z danego zakresu bez zakłócania kolejności pozostałych elementów i zwracania końca nowego zakresu wolnego od określonej wartości. |
replace |
Sprawdza każdy element w zakresie i zastępuje go, jeśli odpowiada określonej wartości. |
replace_copy |
Sprawdza każdy element w zakresie źródłowym i zastępuje go, jeśli odpowiada określonej wartości, jednocześnie kopiując wynik do nowego zakresu docelowego. |
replace_copy_if |
Sprawdza każdy element w zakresie źródłowym i zastępuje go, jeśli spełnia określony predykat, jednocześnie kopiując wynik do nowego zakresu docelowego. |
replace_if |
Sprawdza każdy element w zakresie i zastępuje go, jeśli spełnia określony predykat. |
reverse |
Odwraca kolejność elementów w obrębie zakresu. |
reverse_copy |
Odwraca kolejność elementów w obrębie zakresu źródłowego, jednocześnie kopiując je do zakresu docelowego |
rotate |
Wymienia elementy znajdujące się w dwóch sąsiednich zakresach. |
rotate_copy |
Wymienia elementy w dwóch sąsiednich zakresach w ramach zakresu źródłowego i kopiuje wynik do zakresu docelowego. |
sample |
|
search |
Wyszukuje pierwsze wystąpienie sekwencji w zakresie docelowym, której elementy są równe tym w danej sekwencji elementów lub której elementy są równoważne w sensie określonym przez predykat binarny dla elementów w danej sekwencji. |
search_n |
Wyszukuje pierwszą podsekwencję w zakresie, w której określona liczba elementów ma określoną wartość lub relację do tej wartości określoną przez predykat binarny. |
set_difference |
Łączy w sobie wszystkie elementy, które należą do jednego posortowanego zakresu źródłowego, ale nie do drugiego posortowanego zakresu źródłowego, w pojedynczy, posortowany zakres docelowy, gdzie kryterium sortowania może być określone przez predykat binarny. |
set_intersection |
Łączy w sobie wszystkie elementy, które należą do obu posortowanych zakresów źródłowych w pojedynczy posortowany zakres docelowy, gdzie kryterium szeregowania może być określone przez predykat binarny. |
set_symmetric_difference |
Łączy w sobie wszystkie elementy, które należą do jednego z, ale nie obu posortowanych zakresów źródłowych w pojedynczy posortowany zakres docelowy, gdzie kryterium szeregowania może być określone przez predykat binarny. |
set_union |
Łączy w sobie wszystkie elementy, które należą do przynajmniej jednego z dwóch posortowanych zakresów źródłowych w pojedynczy posortowany zakres docelowy, gdzie kryterium szeregowania może być określone przez predykat binarny. |
sort |
Rozmieszcza elementy w określonym zakresie w niemalejącej kolejności lub według kryteriów sortowania określonych przez binarny predykat. |
shuffle |
Elementy mieszania (zmienia rozmieszczenie) dla danego zakresu przy użyciu generatora liczb losowych. |
sort_heap |
Konwertuje stertę na sortowany zakres. |
stable_partition |
Klasyfikuje elementy w zakresie na dwa rozłączne zestawy, z elementami spełniającymi predykat unarny poprzedzającymi te, które go nie spełniają, zachowując względną kolejność elementów równoważnych. |
stable_sort |
Rozmieszcza elementy w określonym zakresie w niemalejącej kolejności lub według kryterium sortowania określonego przez binarny predykat i zachowuje względną kolejność elementów równoważnych. |
swap |
Wymienia wartości elementów między dwoma typami obiektów, przypisując zawartość pierwszego obiektu do drugiego obiektu, a zawartość drugiego do pierwszego. |
swap_ranges |
Zamienia elementy jednego zakresu przez elementy innego zakresu, zakresy mają równe wielkości. |
transform |
Stosuje określony obiekt funkcji dla każdego elementu w zakresie sortowania lub dla pary elementów z dwóch zakresów sortowania i kopiuje zwracane wartości obiektu funkcji do zakresu docelowego. |
unique |
Usuwa zduplikowane elementy, które znajdują się obok siebie w określonym zakresie. |
unique_copy |
Kopiuje elementy z zakresu źródłowego do zakresu docelowego z wyjątkiem zduplikowanych elementów, które znajdują się obok siebie. |
upper_bound |
Znajduje pozycję pierwszego elementu w uporządkowanym zakresie, który ma wartość większą niż określona wartość, gdzie kryterium sortowania może być określone przez predykat binarny. |
Zobacz też
Odwołanie do plików nagłówka
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++