<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 rangewartość . 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ład find_if algorytm wyszukuje elementy, których wartości spełniają kryterium określone przez obiekt funkcji, podczas gdy find 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ład reverse algorytm odwraca kolejność elementów w zakresie, natomiast reverse_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++