Namensräume
Varianten
Aktionen

Eingeschränkte Algorithmen (seit C++20)

Von cppreference.com
< cpp‎ | algorithm
 
 
Algorithmenbibliothek
Eingeschränkte Algorithmen und Algorithmen auf Bereichen (C++20)
Beschränkte Algorithmen, z.B. ranges::copy, ranges::sort, ...
Ausführungsrichtlinien (C++17)
Nicht-modifizierende Sequenzoperationen
Stapeloperationen
(C++17)
Suchoperationen
(C++11)                (C++11)(C++11)

Modifizierende Sequenzoperationen
Kopieroperationen
(C++11)
(C++11)
Tauschoperationen
Transformationsoperationen
Generierungsoperationen
Entfernungsoperationen
Ordnungsändernde Operationen
(bis C++17)(C++11)
(C++20)(C++20)
Stichprobenoperationen
(C++17)

Sortier- und verwandte Operationen
Partitionierungsoperationen
Sortieroperationen
Binäre Suchoperationen
(auf partitionierten Bereichen)
Mengenoperationen (auf sortierten Bereichen)
Zusammenführungsoperationen (auf sortierten Bereichen)
Heapoperationen
Minimum/Maximum-Operationen
(C++11)
(C++17)
Lexikographische Vergleichsoperationen
Permutationsoperationen
C-Bibliothek
Numerische Operationen
Operationen auf uninitialisiertem Speicher
 
Eingeschränkte Algorithmen
Alle Namen in diesem Menü gehören zum Namespace std::ranges
Nicht-modifizierende Sequenzoperationen
Modifizierende Sequenzoperationen
Partitionierungsoperationen
Sortieroperationen
Binäre Suchoperationen (auf sortierten Bereichen)
       
       
Mengenoperationen (auf sortierten Bereichen)
Heapoperationen
Minimum/Maximum-Operationen
       
       
Permutationsoperationen
Faltoperationen
Operationen auf uninitialisiertem Speicher
Rückgabetypen
 

C++20 bietet eingeschränkte Versionen der meisten Algorithmen im Namespace std::ranges. In diesen Algorithmen kann ein Bereich entweder als Iterator-Sentinel-Paar oder als einzelnes range-Argument angegeben werden, und Projektionen und Zeiger-auf-Mitglied-Aufrufbare 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.

Inhalt

[bearbeiten] Algorithmus-Funktionsobjekte

Ein Algorithmus-Funktionsobjekt (AFO), umgangssprachlich auch Niebloid genannt, ist ein Customization Point Object (CPO), das als eine oder mehrere überladene Funktion-Templates spezifiziert ist. Der Name dieser Funktion-Templates bezeichnet das entsprechende Algorithmus-Funktionsobjekt.

Für ein Algorithmus-Funktionsobjekt o sei S die entsprechende Menge von Funktion-Templates. Dann ist für jede Sequenz von Argumenten args... o(args...) ausdrucksäquivalent zu s(args...), wobei das Ergebnis der Namensauflösung für s die Überladungsmenge S ist.

Die eingeschränkten Algorithmen im Namespace std::ranges sind als Algorithmus-Funktionsobjekte definiert. Infolgedessen

[bearbeiten] Eingeschränkte Algorithmen

Definiert in Header <algorithm>
Definiert im Namespace std::ranges
Nicht-modifizierende Sequenzoperationen
Prüft, ob eine Bedingung für alle, einige oder keine Elemente in einem Bereich wahr ist
(Algorithmus-Funktionsobjekt)[edit]
wendet ein unäres Funktionsobjekt auf Elemente aus einem Bereich an
(Algorithmus-Funktionsobjekt)[edit]
Wendet ein Funktionsobjekt auf die ersten N Elemente einer Sequenz an
(Algorithmus-Funktionsobjekt)[edit]
Gibt die Anzahl der Elemente zurück, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)[edit]
Findet die erste Position, an der sich zwei Bereiche unterscheiden
(Algorithmus-Funktionsobjekt)[edit]
Bestimmt, ob zwei Elementmengen gleich sind
(Algorithmus-Funktionsobjekt)[edit]
gibt true zurück, wenn ein Bereich lexikographisch kleiner als ein anderer ist
(Algorithmus-Funktionsobjekt)[bearbeiten]
Findet das erste Element, das bestimmte Kriterien erfüllt
(Algorithmus-Funktionsobjekt)[edit]
Findet das letzte Element, das bestimmte Kriterien erfüllt
(Algorithmus-Funktionsobjekt)[edit]
Findet die letzte Sequenz von Elementen in einem bestimmten Bereich
(Algorithmus-Funktionsobjekt)[edit]
Sucht nach einem der Elemente aus einer Menge von Elementen
(Algorithmus-Funktionsobjekt)[edit]
Findet die ersten beiden benachbarten Elemente, die gleich sind (oder eine gegebene Bedingung erfüllen)
(Algorithmus-Funktionsobjekt)[edit]
Sucht nach dem ersten Vorkommen eines Elementbereichs
(Algorithmus-Funktionsobjekt)[edit]
Sucht nach dem ersten Vorkommen einer Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich
(Algorithmus-Funktionsobjekt)[edit]
Prüft, ob der Bereich das gegebene Element oder den gegebenen Teilbereich enthält
(Algorithmus-Funktionsobjekt)[edit]
Prüft, ob ein Bereich mit einem anderen Bereich beginnt
(Algorithmus-Funktionsobjekt)[edit]
Prüft, ob ein Bereich mit einem anderen Bereich endet
(Algorithmus-Funktionsobjekt)[edit]
Modifizierende Sequenzoperationen
Kopiert einen Elementbereich an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)[edit]
Kopiert eine Anzahl von Elementen an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)[edit]
Kopiert einen Elementbereich in umgekehrter Reihenfolge
(Algorithmus-Funktionsobjekt)[edit]
Verschiebt einen Elementbereich an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)[edit]
Verschiebt einen Elementbereich in umgekehrter Reihenfolge an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)[edit]
Weist einem Elementbereich einen bestimmten Wert zu
(Algorithmus-Funktionsobjekt)[edit]
Weist einer Anzahl von Elementen einen Wert zu
(Algorithmus-Funktionsobjekt)[edit]
Wendet eine Funktion auf einen Elementbereich an
(Algorithmus-Funktionsobjekt)[edit]
Speichert das Ergebnis einer Funktion in einem Bereich
(Algorithmus-Funktionsobjekt)[edit]
Speichert das Ergebnis von N Funktionsanwendungen
(Algorithmus-Funktionsobjekt)[edit]
entfernt Elemente, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)[edit]
Kopiert einen Bereich von Elementen und lässt diejenigen aus, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)[edit]
Ersetzt alle Werte, die bestimmte Kriterien erfüllen, durch einen anderen Wert
(Algorithmus-Funktionsobjekt)[edit]
Kopiert einen Bereich und ersetzt Elemente, die bestimmte Kriterien erfüllen, durch einen anderen Wert
(Algorithmus-Funktionsobjekt)[edit]
Tauscht zwei Elementbereiche
(Algorithmus-Funktionsobjekt)[edit]
Kehrt die Reihenfolge der Elemente in einem Bereich um
(Algorithmus-Funktionsobjekt)[edit]
Erstellt eine Kopie eines Bereichs, der umgekehrt ist
(Algorithmus-Funktionsobjekt)[edit]
Rotiert die Reihenfolge der Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)[edit]
Kopiert und rotiert einen Bereich von Elementen
(Algorithmus-Funktionsobjekt)[edit]
Ordnet Elemente in einem Bereich zufällig neu an
(Algorithmus-Funktionsobjekt)[edit]
Verschiebt Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)[edit]
Wählt N zufällige Elemente aus einer Sequenz aus
(Algorithmus-Funktionsobjekt)[edit]
Entfernt aufeinanderfolgende doppelte Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)[edit]
Erstellt eine Kopie eines Bereichs von Elementen, die keine aufeinanderfolgenden Duplikate enthält
(Algorithmus-Funktionsobjekt)[edit]
Partitionierungsoperationen
Stellt fest, ob der Bereich durch das gegebene Prädikat partitioniert ist
(Algorithmus-Funktionsobjekt)[edit]
Teilt einen Bereich von Elementen in zwei Gruppen auf
(Algorithmus-Funktionsobjekt)[edit]
Kopiert einen Bereich und teilt die Elemente in zwei Gruppen auf
(Algorithmus-Funktionsobjekt)[edit]
Teilt Elemente in zwei Gruppen auf und behält dabei ihre relative Reihenfolge bei
(Algorithmus-Funktionsobjekt)[edit]
Findet den Partitionierungspunkt eines partitionierten Bereichs
(Algorithmus-Funktionsobjekt)[edit]
Sortieroperationen
Prüft, ob ein Bereich aufsteigend sortiert ist
(Algorithmus-Funktionsobjekt)[edit]
Findet den größten sortierten Teilbereich
(Algorithmus-Funktionsobjekt)[edit]
Sortiert einen Bereich aufsteigend
(Algorithmus-Funktionsobjekt)[edit]
Sortiert die ersten N Elemente eines Bereichs
(Algorithmus-Funktionsobjekt)[edit]
Kopiert und sortiert einen Bereich von Elementen teilweise
(Algorithmus-Funktionsobjekt)[edit]
Sortiert einen Bereich von Elementen und behält dabei die Reihenfolge zwischen gleichen Elementen bei
(Algorithmus-Funktionsobjekt)[edit]
Sortiert den gegebenen Bereich teilweise, so dass er durch das gegebene Element partitioniert wird
(Algorithmus-Funktionsobjekt)[edit]
Binäre Suchoperationen (auf sortierten Bereichen)
Gibt einen Iterator zum ersten Element zurück, das nicht kleiner als der gegebene Wert ist
(Algorithmus-Funktionsobjekt)[edit]
Gibt einen Iterator zum ersten Element zurück, das *größer* als ein bestimmter Wert ist
(Algorithmus-Funktionsobjekt)[edit]
Stellt fest, ob ein Element in einem teilweise geordneten Bereich vorhanden ist
(Algorithmus-Funktionsobjekt)[edit]
gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen
(Algorithmus-Funktionsobjekt)[edit]
Mengenoperationen (auf sortierten Bereichen)
Führt zwei sortierte Bereiche zusammen
(Algorithmus-Funktionsobjekt)[edit]
Führt zwei sortierte Bereiche an Ort und Stelle zusammen
(Algorithmus-Funktionsobjekt)[edit]
Gibt true zurück, wenn eine Sequenz eine Untersequenz einer anderen ist
(Algorithmus-Funktionsobjekt)[edit]
Berechnet die Differenz zwischen zwei Mengen
(Algorithmus-Funktionsobjekt)[edit]
Berechnet den Schnitt zweier Mengen
(Algorithmus-Funktionsobjekt)[edit]
Berechnet die symmetrische Differenz zwischen zwei Mengen
(Algorithmus-Funktionsobjekt)[edit]
Berechnet die Vereinigung zweier Mengen
(Algorithmus-Funktionsobjekt)[edit]
Heapoperationen
Prüft, ob der gegebene Bereich ein Max-Heap ist
(Algorithmus-Funktionsobjekt)[edit]
Findet den größten Teilbereich, der ein Max-Heap ist
(Algorithmus-Funktionsobjekt)[edit]
Erstellt aus einem Bereich von Elementen einen Max-Heap
(Algorithmus-Funktionsobjekt)[edit]
Fügt ein Element zu einem Max-Heap hinzu
(Algorithmus-Funktionsobjekt)[edit]
Entfernt das größte Element aus einem Max-Heap
(Algorithmus-Funktionsobjekt)[edit]
Verwandelt einen Max-Heap in einen aufsteigend sortierten Bereich von Elementen
(Algorithmus-Funktionsobjekt)[edit]
Minimum/Maximum-Operationen
Gibt den größeren der beiden Werte zurück
(Algorithmus-Funktionsobjekt)[edit]
Gibt das größte Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt)[edit]
Gibt den kleineren der beiden Werte zurück
(Algorithmus-Funktionsobjekt)[bearbeiten]
gibt das kleinste Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt)[bearbeiten]
gibt die kleinere und größere von zwei Elementen zurück
(Algorithmus-Funktionsobjekt)[bearbeiten]
gibt das kleinste und das größte Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt)[bearbeiten]
klemmt einen Wert zwischen einem Paar von Grenzwerte
(Algorithmus-Funktionsobjekt)[bearbeiten]
Permutationsoperationen
bestimmt, ob eine Sequenz eine Permutation einer anderen Sequenz ist
(Algorithmus-Funktionsobjekt)[bearbeiten]
erzeugt die nächstgrößere lexikographische Permutation eines Bereichs von Elementen
(Algorithmus-Funktionsobjekt)[bearbeiten]
erzeugt die nächstkleinere lexikographische Permutation eines Bereichs von Elementen
(Algorithmus-Funktionsobjekt)[bearbeiten]

[bearbeiten] Eingeschränkte numerische Operationen

Definiert in der Header-Datei <numeric>
Definiert im Namespace std::ranges
füllt einen Bereich mit sukzessiven Inkrementen des Startwerts
(Funktionsobjekt für Algorithmen)[bearbeiten]

[bearbeiten] Eingeschränkte Faltoperationen

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

[bearbeiten] Eingeschränkte Algorithmen für uninitialisierten Speicher

Definiert in Header <memory>
Definiert im Namespace std::ranges
kopiert einen Bereich von Objekten in einen uninitialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)[edit]
kopiert eine Anzahl von Objekten in einen uninitialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)[edit]
kopiert ein Objekt in einen uninitialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)[edit]
kopiert ein Objekt in einen uninitialisierten Speicherbereich, definiert durch einen Start und eine Anzahl
(Algorithmus-Funktionsobjekt)[edit]
verschiebt einen Bereich von Objekten in einen uninitialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)[edit]
verschiebt eine Anzahl von Objekten in einen uninitialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)[edit]
konstruiert Objekte mittels Standardinitialisierung in einem uninitialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)[edit]
konstruiert Objekte mittels Standardinitialisierung in einem uninitialisierten Speicherbereich, definiert durch Start und Anzahl
(Algorithmus-Funktionsobjekt)[edit]
konstruiert Objekte mittels Wertinitialisierung in einem uninitialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)[edit]
konstruiert Objekte mittels Wertinitialisierung in einem uninitialisierten Speicherbereich, definiert durch einen Start und eine Anzahl
(Algorithmus-Funktionsobjekt)[edit]
zerstört einen Bereich von Objekten
(Algorithmus-Funktionsobjekt)[edit]
zerstört eine Anzahl von Objekten in einem Bereich
(Algorithmus-Funktionsobjekt)[edit]
zerstört ein Objekt an einer gegebenen Adresse
(Algorithmus-Funktionsobjekt)[edit]
erstellt ein Objekt an einer gegebenen Adresse
(Algorithmus-Funktionsobjekt)[edit]

[bearbeiten] Eingeschränkte Zufallszahl-Algorithmen

Definiert in Header <random>
Definiert im Namespace std::ranges
füllt einen Bereich mit Zufallszahlen aus einem gleichmäßigen Zufalls-Bit-Generator
(Algorithmus-Funktionsobjekt)[bearbeiten]

[bearbeiten] Rückgabetypen

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

[bearbeiten] Anmerkungen

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 Falt-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

[bearbeiten] Meldungen

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
P3136R1 C++20 Niebloids durften als spezielle Entitäten spezifiziert werden
anstatt als Funktionsobjekte
mussten als Funktionsobjekte spezifiziert werden