Namespaces
Variants

Constrained algorithms (since C++20)

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types

C++20 bietet eingeschränkte Versionen der meisten Algorithmen im Namensraum std::ranges . In diesen Algorithmen kann ein Bereich entweder als ein Iterator - Sentinel -Paar oder als ein einzelnes range -Argument angegeben werden, und Projektionen sowie Aufrufbare mit Zeiger-auf-Mitglied werden unterstützt. Zusätzlich wurden die Rückgabetypen der meisten Algorithmen geändert, um alle potenziell nützlichen Informationen zurückzugeben, die während der Ausführung des Algorithmus berechnet wurden.

Inhaltsverzeichnis

Algorithmus-Funktionsobjekte

Ein Algorithmus-Funktionsobjekt (AFO), informell bekannt als Niebloid , ist ein Customization Point Object (CPO), das als eine oder mehrere überladene Funktionsvorlagen spezifiziert ist. Der Name dieser Funktionsvorlagen bezeichnet das entsprechende Algorithmus-Funktionsobjekt.

Für ein Algorithmus-Funktionsobjekt o sei S die entsprechende Menge von Funktions-Templates. Dann gilt für jede Argumentfolge args... , dass o ( args... ) ausdrucksäquivalent zu s ( args... ) ist, wobei das Ergebnis der Namenssuche für s der Überladungssatz S ist.

Die eingeschränkten Algorithmen im Namensraum std::ranges sind als Algorithmus-Funktionsobjekte definiert. Daraus folgt:

Eingeschränkte Algorithmen

Definiert in Header <algorithm>
Definiert im namespace std::ranges
Nicht-modifizierende Sequenzoperationen
prüft, ob ein Prädikat für true für alle, irgendeine oder keine Elemente in einem Bereich ist
(Algorithmus-Funktionsobjekt)
wendet ein unäres Funktionsobjekt auf Elemente aus einem Bereich an
(Algorithmus-Funktionsobjekt)
wendet ein Funktionsobjekt auf die ersten N Elemente einer Sequenz an
(Algorithmus-Funktionsobjekt)
gibt die Anzahl der Elemente zurück, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)
findet die erste Position, an der sich zwei Bereiche unterscheiden
(Algorithmus-Funktionsobjekt)
bestimmt, ob zwei Elementgruppen identisch sind
(Algorithmus-Funktionsobjekt)
gibt true zurück, falls ein Bereich lexikographisch kleiner als ein anderer ist
(Algorithmus-Funktionsobjekt)
findet das erste Element, das bestimmte Kriterien erfüllt
(Algorithmus-Funktionsobjekt)
findet das letzte Element, das bestimmte Kriterien erfüllt
(Algorithmus-Funktionsobjekt)
findet die letzte Sequenz von Elementen in einem bestimmten Bereich
(Algorithmus-Funktionsobjekt)
sucht nach einem beliebigen Element aus einer Menge von Elementen
(Algorithmus-Funktionsobjekt)
findet die ersten zwei benachbarten Elemente, die gleich sind (oder ein gegebenes Prädikat erfüllen)
(Algorithmus-Funktionsobjekt)
such nach dem ersten Vorkommen eines Elementbereichs
(Algorithmus-Funktionsobjekt)
sucht nach dem ersten Vorkommen einer Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich
(Algorithmus-Funktionsobjekt)
prüft, ob der Bereich das gegebene Element oder den gegebenen Teilbereich enthält
(Algorithmus-Funktionsobjekt)
prüft, ob ein Bereich mit einem anderen Bereich beginnt
(Algorithmus-Funktionsobjekt)
prüft, ob ein Bereich mit einem anderen Bereich endet
(Algorithmus-Funktionsobjekt)
Modifizierende Sequenzoperationen
kopiert eine Reihe von Elementen an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)
kopiert eine Anzahl von Elementen an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)
kopiert einen Elementbereich in umgekehrter Reihenfolge
(Algorithmus-Funktionsobjekt)
verschiebt einen Bereich von Elementen an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)
verschiebt einen Elementbereich rückwärts an eine neue Position
(Algorithmus-Funktionsobjekt)
weist einer Reihe von Elementen einen bestimmten Wert zu
(Algorithmus-Funktionsobjekt)
weist einer Anzahl von Elementen einen Wert zu
(Algorithmus-Funktionsobjekt)
wendet eine Funktion auf einen Bereich von Elementen an
(Algorithmus-Funktionsobjekt)
speichert das Ergebnis einer Funktion in einem Bereich
(Algorithmus-Funktionsobjekt)
speichert das Ergebnis von N Aufrufen einer Funktion
(Algorithmus-Funktionsobjekt)
Entfernt Elemente, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)
kopiert einen Bereich von Elementen unter Auslassung derjenigen, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)
ersetzt alle Werte, die bestimmte Kriterien erfüllen, durch einen anderen Wert
(Algorithmus-Funktionsobjekt)
kopiert einen Bereich und ersetzt Elemente, die bestimmte Kriterien erfüllen, durch einen anderen Wert
(Algorithmus-Funktionsobjekt)
tauscht zwei Elementbereiche aus
(Algorithmus-Funktionsobjekt)
kehrt die Reihenfolge der Elemente in einem Bereich um
(Algorithmus-Funktionsobjekt)
erstellt eine Kopie eines umgekehrten Bereichs
(Algorithmus-Funktionsobjekt)
dreht die Reihenfolge der Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)
kopiert und rotiert einen Elementbereich
(Algorithmus-Funktionsobjekt)
ordnet Elemente in einem Bereich zufällig neu an
(Algorithmus-Funktionsobjekt)
verschiebt Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)
wählt N zufällige Elemente aus einer Sequenz aus
(Algorithmus-Funktionsobjekt)
Entfernt aufeinanderfolgende doppelte Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)
erstellt eine Kopie eines Bereichs von Elementen, die keine aufeinanderfolgenden Duplikate enthält
(Algorithmus-Funktionsobjekt)
Partitionierungsoperationen
bestimmt, ob der Bereich durch das gegebene Prädikat partitioniert ist
(Algorithmus-Funktionsobjekt)
unterteilt eine Reihe von Elementen in zwei Gruppen
(Algorithmus-Funktionsobjekt)
kopiert einen Bereich und unterteilt die Elemente in zwei Gruppen
(Algorithmus-Funktionsobjekt)
teilt Elemente in zwei Gruppen auf, während ihre relative Reihenfolge erhalten bleibt
(Algorithmus-Funktionsobjekt)
ermittelt den Partitionierungspunkt eines partitionierten Bereichs
(Algorithmus-Funktionsobjekt)
Sortieroperationen
prüft, ob ein Bereich in aufsteigender Reihenfolge sortiert ist
(Algorithmus-Funktionsobjekt)
findet den größten sortierten Teilbereich
(Algorithmus-Funktionsobjekt)
sortiert einen Bereich in aufsteigender Reihenfolge
(Algorithmus-Funktionsobjekt)
sortiert die ersten N Elemente eines Bereichs
(Algorithmus-Funktionsobjekt)
kopiert und teilweise sortiert einen Bereich von Elementen
(Algorithmus-Funktionsobjekt)
sortiert eine Reihe von Elementen, während die Reihenfolge zwischen gleichen Elementen beibehalten wird
(Algorithmus-Funktionsobjekt)
Sortiert den gegebenen Bereich teilweise und stellt sicher, dass er durch das gegebene Element partitioniert wird
(Algorithmus-Funktionsobjekt)
Binäre Suchoperationen (auf sortierten Bereichen)
gibt einen Iterator zum ersten Element zurück, das nicht kleiner als der gegebene Wert ist
(Algorithmus-Funktionsobjekt)
gibt einen Iterator zum ersten Element zurück, das größer als ein bestimmter Wert ist
(Algorithmus-Funktionsobjekt)
bestimmt, ob ein Element in einem teilweise geordneten Bereich existiert
(Algorithmus-Funktionsobjekt)
gibt den Bereich der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(Algorithmus-Funktionsobjekt)
Mengenoperationen (auf sortierten Bereichen)
fasst zwei sortierte Bereiche zusammen
(Algorithmus-Funktionsobjekt)
verbindet zwei geordnete Bereiche direkt
(Algorithmus-Funktionsobjekt)
gibt true zurück, falls eine Sequenz eine Teilsequenz einer anderen ist
(Algorithmus-Funktionsobjekt)
berechnet die Differenz zwischen zwei Mengen
(Algorithmus-Funktionsobjekt)
berechnet die Schnittmenge zweier Mengen
(Algorithmus-Funktionsobjekt)
berechnet die symmetrische Differenz zwischen zwei Mengen
(Algorithmus-Funktionsobjekt)
berechnet die Vereinigung zweier Mengen
(Algorithmus-Funktionsobjekt)
Heap-Operationen
prüft, ob der gegebene Bereich ein Max-Heap ist
(Algorithmus-Funktionsobjekt)
findet den größten Teilbereich, der einen Max-Heap darstellt
(Algorithmus-Funktionsobjekt)
erstellt einen Max-Heap aus einer Reihe von Elementen
(Algorithmus-Funktionsobjekt)
fügt ein Element zu einem Max-Heap hinzu
(Algorithmus-Funktionsobjekt)
entfernt das größte Element aus einem Max-Heap
(Algorithmus-Funktionsobjekt)
wandelt einen Max-Heap in einen Bereich von Elementen um, die in aufsteigender Reihenfolge sortiert sind
(Algorithmus-Funktionsobjekt)
Minimum-/Maximum-Operationen
gibt den größeren der gegebenen Werte zurück
(Algorithmus-Funktionsobjekt)
gibt das größte Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt)
gibt den kleineren der gegebenen Werte zurück
(Algorithmus-Funktionsobjekt)
gibt das kleinste Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt)
gibt das kleinere und größere von zwei Elementen zurück
(Algorithmus-Funktionsobjekt)
gibt die kleinsten und größten Elemente in einem Bereich zurück
(Algorithmus-Funktionsobjekt)
begrenzt einen Wert auf einen Bereich zwischen zwei Grenzwerten
(Algorithmus-Funktionsobjekt)
Permutationsoperationen
bestimmt, ob eine Sequenz eine Permutation einer anderen Sequenz ist
(Algorithmus-Funktionsobjekt)
erzeugt die nächstgrößere lexikografische Permutation eines Elementebereichs
(Algorithmus-Funktionsobjekt)
erzeugt die nächstkleinere lexikografische Permutation eines Elementebereichs
(Algorithmus-Funktionsobjekt)

Eingeschränkte numerische Operationen

Definiert in Header <numeric>
Definiert in Namespace std::ranges
füllt einen Bereich mit sukzessiven Inkrementen des Startwerts
(Algorithmus-Funktionsobjekt)

Eingeschränkte Faltoperationen

Definiert in Header <algorithm>
Definiert in Namespace std::ranges
faltet eine Elementbereich von links
(Algorithmus-Funktionsobjekt)
faltet eine Elementbereich von links unter Verwendung des ersten Elements als Anfangswert
(Algorithmus-Funktionsobjekt)
faltet eine Elementbereich von rechts
(Algorithmus-Funktionsobjekt)
faltet eine Elementbereich von rechts unter Verwendung des letzten Elements als Anfangswert
(Algorithmus-Funktionsobjekt)
faltet eine Elementbereich von links und gibt ein Paar (Iterator, Wert) zurück
(Algorithmus-Funktionsobjekt)
faltet eine Elementbereich von links unter Verwendung des ersten Elements als Anfangswert und gibt ein Paar (Iterator, optional ) zurück
(Algorithmus-Funktionsobjekt)

Eingeschränkte Algorithmen für nicht initialisierten Speicher

Definiert im Header <memory>
Definiert im Namensbereich std::ranges
kopiert einen Objektbereich in einen nicht initialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)
kopiert eine Anzahl von Objekten in einen nicht initialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)
kopiert ein Objekt in einen nicht initialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)
kopiert ein Objekt in einen nicht initialisierten Speicherbereich, definiert durch einen Start und eine Anzahl
(Algorithmus-Funktionsobjekt)
verschiebt einen Objektbereich in einen nicht initialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)
verschiebt eine Anzahl von Objekten in einen nicht initialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)
konstruiert Objekte durch Default-Initialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)
konstruiert Objekte durch Default-Initialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Start und eine Anzahl
(Algorithmus-Funktionsobjekt)
konstruiert Objekte durch Wert-Initialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)
konstruiert Objekte durch Wert-Initialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Start und eine Anzahl
(Algorithmus-Funktionsobjekt)
zerstört einen Objektbereich
(Algorithmus-Funktionsobjekt)
zerstört eine Anzahl von Objekten in einem Bereich
(Algorithmus-Funktionsobjekt)
zerstört ein Objekt an einer gegebenen Adresse
(Algorithmus-Funktionsobjekt)
erstellt ein Objekt an einer gegebenen Adresse
(Algorithmus-Funktionsobjekt)

Eingeschränkte Zufallszahlen-Algorithmen

Definiert in Header <random>
Definiert in Namespace std::ranges
füllt einen Bereich mit Zufallszahlen von einem uniform random bit generator
(Algorithmus-Funktionsobjekt)

Rückgabetypen

Definiert in Header <algorithm>
Definiert in Namespace std::ranges
bietet eine Möglichkeit, einen Iterator und ein Funktionsobjekt als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, zwei Iteratoren als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, zwei Iteratoren als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, drei Iteratoren als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, drei Iteratoren als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, zwei Objekte oder Referenzen desselben Typs als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, einen Iterator und ein boolesches Flag als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, einen Iterator und einen Wert als eine Einheit zu speichern
(Klassentemplate)
bietet eine Möglichkeit, einen Iterator und einen Wert als eine Einheit zu speichern
(Klassentemplate)

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_algorithm_default_value_type 202403L (C++26) Listeninitialisierung für Algorithmen
__cpp_lib_ranges 201911L (C++20) Ranges-Bibliothek und eingeschränkte Algorithmen
__cpp_lib_ranges_contains 202207L (C++23) std::ranges::contains
__cpp_lib_ranges_find_last 202207L (C++23) std::ranges::find_last
__cpp_lib_ranges_fold 202207L (C++23) std::ranges Fold-Algorithmen
__cpp_lib_ranges_iota 202202L (C++23) std::ranges::iota
__cpp_lib_ranges_starts_ends_with 202106L (C++23) std::ranges::starts_with , std::ranges::ends_with
__cpp_lib_shift 201806L (C++20) std::shift_left , std::shift_right
202202L (C++23) std::ranges::shift_left , std::ranges::shift_right
__cpp_lib_ranges_generate_random 202403L (C++26) std::ranges::generate_random

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
P3136R1 C++20 Niebloids durften als spezielle Entitäten
außer Funktionsobjekten spezifiziert werden
müssen als Funktionsobjekte spezifiziert werden