<algorithm>

Definiert C++-Standardbibliothek-Containervorlagenfunktionen, die Algorithmen ausführen.

Syntax

(see links below for specific algorithm syntax)

Hinweis

Die <algorithm> Bibliothek verwendet auch die #include <initializer_list> Anweisung.

Hinweise

Die C++-Standardbibliotheksalgorithmen können auf verschiedenen Datenstrukturen arbeiten. Die Datenstrukturen, auf denen sie arbeiten können, umfassen nicht nur die Containerklassen der C++-Standardbibliothek, wie vector z. B. und list, sondern auch benutzerdefinierte Datenstrukturen und Arrays von Elementen, sofern sie die Anforderungen eines bestimmten Algorithmus erfüllen. C++-Standardbibliotheksalgorithmen erzielen dieses Maß an Allgemeingültigkeit, indem sie indirekt über Iteratoren auf die Elemente eines Containers zugreifen und diese durchlaufen.

Die C++-Standardbibliothek-Iteratorbereiche für Algorithmen werden in der Regel durch ihre Start- oder Zielpositionen angegeben. Die bereiche, auf die verwiesen wird, müssen in dem Sinne gültig sein, dass alle Iteratoren in den Bereichen abgeleitet werden müssen und innerhalb der Sequenzen jedes Bereichs die letzte Position erreicht werden muss, indem sie den Iterator erhöht.

Ab C++20 sind die meisten der definierten <algorithm> Algorithmen auch in einer Form verfügbar, die eine range. Anstelle eines Anrufs sort(v1.begin(), v1.end(), greater<int>());können Sie z. B. anrufen ranges::sort(v1, greater<int>());

Die C++-Standardbibliotheksalgorithmen können gleichzeitig mit unterschiedlichen Containerobjekttypen verwendet werden. Zwei Suffixe wurden verwendet, um Informationen über den Zweck der Algorithmen zu vermitteln:

  • Das _if Suffix gibt an, dass der Algorithmus mit Funktionsobjekten verwendet wird, die die Werte der Elemente anstelle der Elemente selbst verwenden. Beispielsweise sucht der find_if Algorithmus nach Elementen, deren Werte das durch ein Funktionsobjekt angegebene Kriterium erfüllen, während der find Algorithmus nach einem bestimmten Wert sucht.

  • Das _copy Suffix gibt an, dass der Algorithmus in der Regel kopierte Werte ändert, anstatt geänderte Werte zu kopieren. Mit anderen Worten, sie ändern nicht die Elemente des Quellbereichs, sondern fügen die Ergebnisse in einen Ausgabebereich/Iterator ein. Beispielsweise kehrt der reverse Algorithmus die Reihenfolge der Elemente innerhalb eines Bereichs um, während der reverse_copy Algorithmus das umgekehrte Ergebnis in einen Zielbereich kopiert.

C++-Standardbibliotheksalgorithmen werden häufig in Gruppen unterteilt, um ihren Zweck oder ihre Anforderungen anzugeben. Dazu gehören das Ändern von Algorithmen, die den Wert von Elementen im Vergleich zu nicht ändernden Algorithmen ändern, die nicht geändert werden. Mit Mutationsalgorithmen wird zwar die Reihenfolge von Elementen geändert, jedoch nicht die Werte ihrer Elemente. Mit Entfernungsalgorithmen können Elemente aus einem Bereich oder aus einer Kopie eines Bereichs entfernt werden. Sortieralgorithmen ordnen die Elemente in einem Bereich auf verschiedene Weise neu an, und sortierte Bereichsalgorithmen wirken nur auf Bereiche, deren Elemente auf eine bestimmte Weise sortiert wurden.

Die numerischen Algorithmen der C++-Standardbibliothek, die für die numerische Verarbeitung bereitgestellt werden, verfügen über eine eigene Headerdatei <numeric>, und Funktionsobjekte und Adapter werden in der Kopfzeile <functional>definiert. Funktionsobjekte, die boolesche Werte zurückgeben, werden als Prädikate bezeichnet. Das binäre Standardprädikat ist der Vergleichs-operator<. Im Allgemeinen müssen die elemente, die sortiert werden, kleiner als vergleichbar sein, damit sie aufgrund von zwei Elementen entweder gleich sind (im Sinne, dass keines kleiner als der andere ist) oder dass ein Element kleiner als der andere ist oder kleiner als der andere ist. Dies führt zu einer Sortierung zwischen den nicht gleichwertigen Elementen.

Algorithmen

Name Beschreibung
adjacent_find Sucht zwei benachbarte Elemente, die entweder gleich sind oder eine angegebene Bedingung erfüllen.
all_of Gibt true zurück, wenn eine Bedingung bei jedem Element im angegebenen Bereich vorhanden ist.
any_of Gibt true zurück, wenn eine Bedingung mindestens einmal im angegebenen Bereich von Elementen vorhanden ist.
binary_search Testet, ob ein Element in einem sortierten Bereich einem angegebenen Wert entspricht oder ihm auf eine von einem binären Prädikat angegebene Weise gleicht.
clamp
copy Weist die Werte von Elementen aus einem Quellbereich einem Zielbereich zu, durchläuft die Quellelementsequenz und weist ihnen vorwärts neue Positionen zu.
copy_backward Weist die Werte von Elementen aus einem Quellbereich einem Zielbereich zu, durchläuft die Quellelementsequenz und weist ihnen rückwärts neue Positionen zu.
copy_if Kopiert alle Elemente in einen angegebenen Bereich, der true für eine angegebene Bedingung testet.
copy_n Kopiert eine angegebene Anzahl von Elementen.
count Gibt die Anzahl von Elementen in einem Bereich zurück, dessen Werte mit einem angegebenen Wert übereinstimmen.
count_if Gibt die Anzahl von Elementen in einem Bereich zurück, dessen Werte mit einer angegebenen Bedingung übereinstimmen.
equal Vergleicht zwei Bereiche elementweise entweder auf Gleichheit oder Äquivalenz in dem durch ein binäres Prädikat angegebenen Sinn.
equal_range Sucht ein Paar Positionen in einem sortierten Bereich, wobei die erste Position kleiner als oder gleich der Position eines bestimmten Elements und die zweite Position größer als die Position des Elements ist. Die Äquivalenz oder Sortierung zur Festlegung der Positionen in der Sequenz kann durch ein binäres Prädikat angegeben werden.
fill Weist den gleichen neuen Wert jedem Element in einem angegebenen Bereich zu.
fill_n Weist einer angegebenen Anzahl von Elementen in einem Bereich, der mit einem bestimmten Element beginnt, einen neuen Wert zu.
find Sucht die Position des ersten Vorkommens eines Elements in einem Bereich, der einen angegebenen Wert enthält.
find_end Sucht in einem Bereich nach der letzten Untersequenz, die mit einer angegebenen Sequenz identisch ist oder die in durch ein binäres Prädikat angegebenen Sinne äquivalent ist.
find_first_of Sucht das erste Vorkommen mehrerer Werte innerhalb eines Zielbereichs oder das erste Vorkommen mehrerer Elemente, die wie durch ein binäres Prädikat angegeben mit einem angegebenen Satz der Elemente äquivalent sind.
find_if Sucht die Position des ersten Vorkommens eines Elements in einem Bereich, der eine bestimmte Bedingung erfüllt.
find_if_not Gibt das erste Element im angegebenen Bereich zurück, das keine Bedingung erfüllt.
for_each Wendet ein angegebenes Funktionsobjekt auf jedes Element in einer Vorwärtsreihenfolge innerhalb eines Bereichs an und gibt das Funktionsobjekt zurück.
for_each_n
generate Weist die Werte, die von einem Funktionsobjekt generiert werden, jedem Element in einem Bereich zu.
generate_n Weist die Werte, die von einem Funktionsobjekt generiert werden, einer angegebenen Anzahl von Elementen eines Bereichs zu und kehrt zu der Position zurück, die direkt nach dem letzten zugewiesenen Wert liegt.
includes Testet, ob ein sortierter Bereich alle Elemente enthält, die in einem zweiten sortierten Bereich enthalten sind, wobei das Sortier- oder Äquivalenzkriterium für die Elemente durch ein binäres Prädikat angegeben werden kann.
inplace_merge Kombiniert die Elemente von zwei aufeinander folgenden sortierten Bereichen in einen einzelnen sortierten Bereich, wobei das Sortierkriterium durch ein binäres Prädikat angegeben werden kann.
is_heap Gibt true zurück, wenn die Elemente im angegebenen Bereich ein Heap bilden.
is_heap_until Gibt true zurück, wenn der angegebene Bereich ein Heap bis zum letzten Element bildet.
is_partitioned Gibt true zurück, wenn alle Elemente im angegebenen Bereich, die für eine Bedingung true ergeben, vor allen Elementen liegen, die false ergeben.
is_permutation Legt fest, ob die Elemente in einem angegebenen Bereich eine gültige Permutation bilden.
is_sorted Gibt true zurück, wenn sich die Elemente im angegebenen Bereich in einer sortierten Reihenfolge befinden.
is_sorted_until Gibt true zurück, wenn sich die Elemente im angegebenen Bereich in einer sortierten Reihenfolge befinden.
iter_swap Tauscht zwei Werte aus, auf die durch ein Paar angegebener Iteratoren verwiesen wird.
lexicographical_compare Vergleicht zwei Sequenzen elementweise, um zu bestimmen, welche der beiden kleiner ist.
lower_bound Sucht die Position des ersten Elements in einem sortierten Bereich, der über einen Wert größer als oder gleich einem angegebenen Wert verfügt. Dabei wird das Sortierkriterium möglicherweise von einen binären Prädikat bestimmt.
make_heap Konvertiert Elemente aus einem angegebenen Bereich in einen Heap, in dem das erste Element das größte ist und für den ein Sortierkriterium durch ein binäres Prädikat angegeben werden kann.
max Vergleicht zwei Objekte und gibt das größere der beiden zurück, wobei das Sortierkriterium möglicherweise von einem binären Prädikat angegeben wird.
max_element Sucht das erste Vorkommen des größten Elements in einem angegebenen Bereich, in dem das Sortierkriterium möglicherweise von einem binären Prädikat angegeben wird.
merge Kombiniert alle Elemente von zwei sortierten Quellbereichen in einen einzelnen sortierten Zielbereich, wobei das Sortierkriterium durch ein binäres Prädikat angegeben werden kann.
min Vergleicht zwei Objekte und gibt das kleinere der beiden zurück, wobei das Sortierkriterium möglicherweise von einem binären Prädikat angegeben wird.
min_element Sucht das erste Vorkommen des kleinsten Elements in einem angegebenen Bereich, in dem das Sortierkriterium von einem binären Prädikat angegeben werden kann.
minmax Vergleicht zwei Eingabeparameter und gibt diese als Paar, in der Reihenfolge "kleiner zu größer", zurück.
minmax_element Führt die Aufgaben aus, die von min_element und max_element in einem Aufruf erledigt werden.
mismatch Vergleicht zwei Bereiche elementweise entweder auf Gleichheit oder Äquivalenz, wie von einem binären Prädikat angegeben, und sucht die erste Position, an der ein Unterschied auftritt.
<alg> move Verschiebt Elemente, die einem angegebenen Bereich zugeordnet sind.
move_backward Verschiebt die Elemente eines Iterators in einen anderen. Die Verschiebung beginnt mit dem letzten Element in einem angegebenen Bereich und endet mit dem ersten Element in diesem Bereich.
next_permutation Ordnet die Elemente in einem Bereich neu, damit die ursprüngliche Reihenfolge von der lexikografisch nächsthöheren Permutation ersetzt wird, falls vorhanden, wobei die Bedeutung von „nächsthöher“ durch ein binäres Prädikat angegeben werden kann.
none_of Gibt true zurück, wenn eine Bedingung für die Elemente im angegebenen Bereich nie vorhanden ist.
nth_element Partitioniert einen Bereich von Elementen und ermittelt das n-te Element der Sequenz im Bereich, sodass alle Elemente davor kleiner oder gleich sind und alle Elemente, die in der Sequenz folgen, größer oder gleich sind.
partial_sort Ordnet eine bestimmte Anzahl von kleineren Elementen in einem Bereich in einer aufsteigenden Reihenfolge oder gemäß eines Sortierkriteriums an, das von einem binären Prädikat angegeben wird.
partial_sort_copy Kopiert Elemente aus einem Quellbereich in einen Zielbereich, in dem die Quellelemente entweder durch kleiner als oder durch ein anderes festgelegtes binäres Prädikat sortiert werden.
partition Klassifiziert Elemente in einem Bereich in zwei zusammenhanglose Sätze, wenn diese Elemente ein unäres Prädikat erfüllen, das denen direkt vorausgeht, die es nicht erfüllen können.
partition_copy Kopiert Elemente, für die eine Bedingung true für ein Ziel ist, und für die die Bedingung false für ein anderes Ziel ist. Die Elemente müssen von einem angegebenen Bereich stammen.
partition_point Gibt das erste Element im angegebenen Bereich zurück, das die Bedingung nicht erfüllt. Die Elemente werden so sortiert, dass diejenigen, die die Bedingung erfüllen, vor denen stehen, die nicht funktionieren.
pop_heap Entfernt das größte Element von der Vorderseite eines Heaps und fügt es in die vorletzte Position des Bereichs ein und bildet dann einen neuen Heap aus den übrigen Elementen.
prev_permutation Ordnet die Elemente in einem Bereich neu, damit die ursprüngliche Reihenfolge von der lexikografisch nächsthöheren Permutation ersetzt wird, falls vorhanden, wobei die Bedeutung von „nächsthöher“ durch ein binäres Prädikat angegeben werden kann.
push_heap Fügt ein Element hinzu, das sich am Ende eines Bereichs in einem vorhandenen Heap befindet, der aus den vorherigen Elementen im Bereich besteht.
random_shuffle Sortiert eine Sequenz von N Elementen in einem Bereich in einer von N! möglichen per Zufall ausgewählten Anordnungen neu.
remove Eliminiert einen angegebenen Wert von einem angegebenen Bereich, ohne die Reihenfolge der restlichen Elemente zu beeinträchtigen und das Ende eines neuen Bereichs zurückzugeben, der den angegebenen Wert nicht enthält.
remove_copy Kopiert Elemente aus einem Quellbereich in einen Zielbereich, mit der Ausnahme, dass Elemente eines angegebenen Werts nicht kopiert werden, ohne die Reihenfolge der Standard Neuelemente zu stören und das Ende eines neuen Zielbereichs zurückzugeben.
remove_copy_if Kopiert Elemente aus einem Quellbereich in einen Zielbereich, mit der Ausnahme, dass die Erfüllung eines Prädikats nicht kopiert wird, ohne die Reihenfolge der Standard Neuelemente zu stören und das Ende eines neuen Zielbereichs zurückzugeben.
remove_if Eliminiert Elemente, die ein Prädikat aus einem angegebenen Bereich erfüllen, ohne die Reihenfolge der restlichen Elemente zu beeinträchtigen und das Ende eines neuen Bereichs zurückzugeben, der den angegebenen Wert nicht enthält.
replace Überprüft jedes Element in einem Bereich und ersetzt es, sofern es einem angegebenen Wert entspricht.
replace_copy Überprüft jedes Element in einem Quellbereich und ersetzt es, sofern es einem angegebenen Wert entspricht, während das Ergebnis in einen neuen Zielbereich kopiert wird.
replace_copy_if Überprüft jedes Element in einem Quellbereich und ersetzt es, sofern es ein angegebenes Prädikat erfüllt, während das Ergebnis in einen neuen Zielbereich kopiert wird.
replace_if Überprüft jedes Element in einem Bereich und ersetzt es, sofern es das angegebene Prädikat erfüllt.
reverse Kehrt die Reihenfolge der Elemente innerhalb eines Bereichs um.
reverse_copy Kehrt die Reihenfolge der Elemente in einem Quellbereich beim Kopieren in einen Zielbereich um.
rotate Vertauscht die Elemente in zwei benachbarten Bereichen.
rotate_copy Vertauscht die Elemente in zwei benachbarten Bereiche innerhalb eines Quellbereichs und kopiert das Ergebnis in einen Zielbereich.
sample
search Sucht das erste Vorkommen einer Sequenz in einem Zielbereich, dessen Elemente gleich den Elementen in einer bestimmten Elementsequenz sind oder dessen Elemente äquivalent sind mit den Elementen in der angegebenen Sequenz, wie durch ein binäres Prädikat festgelegt.
search_n Sucht nach der ersten Untersequenz in einem Bereich, der aus einer angegebenen Anzahl von Elementen besteht, die einen bestimmten Wert oder eine Beziehung zu diesem durch ein binäres Prädikat angegebenen Wert haben.
set_difference Vereinigt alle Elemente, die zu dem einen, jedoch nicht zu einem anderen sortierten Quellbereich gehören, in einen einzelnen, sortierten Zielbereich, wobei das Sortierkriterium durch ein binäres Prädikat angegeben werden kann.
set_intersection Vereinigt alle Elemente, die zu beiden sortierten Quellbereichen gehören, in einen einzelnen sortierten Zielbereich, wobei das Sortierkriterium durch ein binäres Prädikat angegeben werden kann.
set_symmetric_difference Vereinigt alle Elemente, die zu einem, jedoch nicht zu beiden sortierten Quellbereichen gehören, in einen einzelnen sortierten Zielbereich, wobei das Sortierkriterium durch ein binäres Prädikat angegeben werden kann.
set_union Vereinigt alle Elemente, die mindestens zu einem der beiden sortierten Quellbereiche gehören, in einen einzelnen sortierten Zielbereich, wobei das Sortierkriterium durch ein binäres Prädikat angegeben werden kann.
sort Ordnet die Elemente in einem angegebenen Bereich in einer aufsteigenden Reihenfolge oder gemäß eines Sortierkriteriums an, das von einem binären Prädikat angegeben wird.
shuffle Mischt (sortiert) Elemente für einen gegebenen Bereich mithilfe eines Zufallszahlengenerators.
sort_heap Konvertiert einen Heap in einen sortierten Bereich.
stable_partition Klassifiziert Elemente in einem Bereich in zwei zusammenhanglose Sätze, wobei die Elemente, die ein unäres Prädikat erfüllen, direkt den Elementen vorausgehen, die es nicht erfüllen können. Die relative Reihenfolge der äquivalenten Elemente wird dabei beibehalten.
stable_sort Ordnet die Elemente in einem angegebenen Bereich in einer aufsteigenden Reihenfolge oder gemäß eines Sortierkriteriums an, das von einem binären Prädikat angegeben wird, und behält die relative Reihenfolge der äquivalenten Elemente bei.
swap Vertauscht die Werte der Elemente von zwei Objekttypen und weist den Inhalt des ersten Objekts dem zweiten Objekt und den Inhalt des zweiten dem ersten zu.
swap_ranges Vertauscht die Elemente eines Bereichs mit den Elementen eines anderen gleich großen Bereichs.
transform Wendet ein angegebenes Funktionsobjekt auf jedes Element in einem Quellbereich oder auf ein Elementpaar aus zwei Quellbereichen an und kopiert die Rückgabewerte des Funktionsobjekts in einen Zielbereich.
unique Entfernt doppelte Elemente, die sich in einem angegebenen Bereich nebeneinander befinden.
unique_copy Kopiert Elemente aus einem Quellbereich in einen Zielbereich mit Ausnahme der doppelten Elemente, die sich nebeneinander befinden.
upper_bound Sucht die Position des ersten Elements in einem sortierten Bereich, der über einen Wert größer als einen angegebenen Wert verfügt. Dabei wird das Sortierkriterium möglicherweise von einen binären Prädikat bestimmt.

Siehe auch

Headerdateienreferenz
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz