Namespaces
Variants

Eingeschränkte Algorithmen (seit C++20)

Von de.cppreference.net
 
 
Algorithmen-Bibliothek
Eingeschränkte Algorithmen und Algorithmen auf Bereichen (C++20)
Eingeschränkte Algorithmen, z.B. ranges::copy, ranges::sort, ...
Nicht modifizierende Sequenzoperationen    
Batch-Operationen
(C++17)
Suchoperationen
Modifizierende Sequenzoperationen
Kopieroperationen
(C++11)
(C++11)
Swap-Operationen
Transformationsoperationen
Generierungsoperationen
Entfernungsoperationen
Reihenfolgeändernde Operationen
(bis C++17)(C++11)
(C++20)(C++20)
Sampling-Operationen
(C++17)

Sortierungs- und verwandte Operationen
Partitionierungsoperationen
(C++11)    

Sortierungsoperationen
Binäre Suchoperationen
(auf partitionierten Bereichen)
Mengenoperationen (auf sortierten Bereichen)
Mischoperationen (auf sortierten Bereichen)
Heap-Operationen
Minimum/Maximum-Operationen
(C++11)
(C++17)
Lexikografische Vergleichsoperationen
Permutationsoperationen


 
Eingeschränkte Algorithmen
Alle Namen in diesem Menü gehören zum Namensraum std::ranges
Nicht modifizierende Sequenzoperationen
Modifizierende Sequenzoperationen
Partitionierungsoperationen
Sortierungsoperationen
Binäre Suchoperationen (auf sortierten Bereichen)
       
       
Mengenoperationen (auf sortierten Bereichen)
Heap-Operationen
Minimum/Maximum-Operationen
       
       
Permutationsoperationen
Faltungsoperationen
Operationen auf nicht initialisiertem Speicher
Rückgabetypen
 

C++20 bietet eingeschränkte Versionen der meisten Algorithmen im Namensraum std::ranges. Bei diesen Algorithmen kann ein Bereich entweder als Iterator-Sentinel-Paar oder als ein einzelnes Bereichsargument angegeben werden, und Projektionen und Pointer-to-Member-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.

Algorithmus-Funktionsobjekte

Ein Algorithmus-Funktionsobjekt (AFO), informell auch Niebloid  genannt, ist ein Customization-Point-Objekt (CPO), das als eine oder mehrere überladene Funktionsschablonen spezifiziert ist.

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

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

Range-Parameter

Einige Überladungen nehmen Bereich-Argumente, sie verhalten sich, als ob sie durch Weiterleitung an die entsprechende Überladung im Namensraum ranges implementiert wären, die separate Iterator- und Sentinel-Argumente nimmt, wobei für jedes Bereichsargument r:

  • Das entsprechende Iterator-Argument wird mit ranges::begin(r) initialisiert.
  • Das entsprechende Sentinel-Argument wird mit ranges::end(r) initialisiert.
(bis C++26)
  • Das entsprechende Sentinel-Argument wird initialisiert mit:
  • ranges::next(ranges::begin(r), ranges::end(r)), falls der Typ von r das Konzept forward_range modelliert und die Berechnung von ranges::next die angegebenen Komplexitätsanforderungen erfüllt.
  • ranges::end(r) ansonsten.
(seit C++26)

Nicht-modifizierende Sequenzoperationen

Definiert in Header <algorithm>
Definiert in Namensraum std::ranges
Batch-Operationen
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)
Suchoperationen
prüft, ob ein Prädikat true für alle, einige oder keines der Elemente in einem Bereich ist
(Algorithmus-Funktionsobjekt)
prüft, ob der Bereich das angegebene Element oder den angegebenen Teilbereich enthält
(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 Folge 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)
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 Mengen von Elementen gleich sind
(Algorithmus-Funktionsobjekt)
sucht nach dem ersten Vorkommen einer Folge von Elementen
(Algorithmus-Funktionsobjekt)
sucht nach dem ersten Vorkommen einer bestimmten Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich
(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)
Faltungsoperationen
faltet einen Bereich von Elementen von links
(Algorithmus-Funktionsobjekt)
faltet einen Bereich von Elementen von links unter Verwendung des ersten Elements als Anfangswert
(Algorithmus-Funktionsobjekt)
faltet einen Bereich von Elementen von rechts
(Algorithmus-Funktionsobjekt)
faltet einen Bereich von Elementen von rechts unter Verwendung des letzten Elements als Anfangswert
(Algorithmus-Funktionsobjekt)
faltet einen Bereich von Elementen von links, und gibt ein pair (Iterator, Wert)
(Algorithmus-Funktionsobjekt)
faltet einen Bereich von Elementen von links unter Verwendung des ersten Elements als Anfangswert, und gibt ein pair (Iterator, optional)
(Algorithmus-Funktionsobjekt)

Modifizierende Sequenzoperationen

Definiert in Header <algorithm>
Definiert in Namensbereich std::ranges
Kopieroperationen
kopiert einen Elementbereich an einen neuen Ort
(Algorithmus-Funktionsobjekt)
kopiert eine Anzahl von Elementen an einen neuen Ort
(Algorithmus-Funktionsobjekt)
kopiert einen Elementbereich in umgekehrter Reihenfolge
(Algorithmus-Funktionsobjekt)
verschiebt einen Elementbereich an einen neuen Ort
(Algorithmus-Funktionsobjekt)
verschiebt einen Elementbereich an einen neuen Ort in umgekehrter Reihenfolge
(Algorithmus-Funktionsobjekt)
Swap-Operationen
tauscht zwei Bereiche von Elementen
(Algorithmus-Funktionsobjekt)
Transformationsoperationen
wendet eine Funktion auf einen Bereich von Elementen an
(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)
Erzeugungsoperationen
weist einem Bereich von Elementen einen bestimmten Wert zu
(Algorithmus-Funktionsobjekt)
weist einer Anzahl von Elementen einen Wert zu
(Algorithmus-Funktionsobjekt)
speichert das Ergebnis einer Funktion in einem Bereich
(Algorithmus-Funktionsobjekt)
speichert das Ergebnis von N Anwendungen einer Funktion
(Algorithmus-Funktionsobjekt)
Entfernungsoperationen
entfernt Elemente, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)
kopiert einen Bereich von Elementen und lässt diejenigen aus, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)
entfernt aufeinanderfolgende doppelte Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)
erzeugt eine Kopie eines Bereichs von Elementen, die keine aufeinanderfolgenden Duplikate enthält
(Algorithmus-Funktionsobjekt)
Operationen zur Änderung der Reihenfolge
kehrt die Reihenfolge der Elemente in einem Bereich um
(Algorithmus-Funktionsobjekt)
erstellt eine umgekehrte Kopie eines Bereichs
(Algorithmus-Funktionsobjekt)
rotiert die Reihenfolge der Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)
kopiert und rotiert einen Bereich von Elementen
(Algorithmus-Funktionsobjekt)
verschiebt Elemente in einem Bereich
(Algorithmus-Funktionsobjekt)
ordnet Elemente in einem Bereich zufällig um
(Algorithmus-Funktionsobjekt)
Stichprobenoperationen
wählt N zufällige Elemente aus einer Sequenz aus
(Algorithmus-Funktionsobjekt)

Sortierung und verwandte Operationen

Definiert in Header <algorithm>
Definiert in Namensraum std::ranges
Partitionierungsoperationen
bestimmt, ob der Bereich durch das gegebene Prädikat partitioniert ist
(Algorithmus-Funktionsobjekt)
teilt einen Bereich von Elementen in zwei Gruppen auf
(Algorithmus-Funktionsobjekt)
kopiert einen Bereich und teilt die Elemente in zwei Gruppen auf
(Algorithmus-Funktionsobjekt)
teilt Elemente in zwei Gruppen auf, wobei die relative Reihenfolge innerhalb jeder Gruppe erhalten bleibt
(Algorithmus-Funktionsobjekt)
lokalisiert den Partitionierungspunkt eines partitionierten Bereichs
(Algorithmus-Funktionsobjekt)
Sortieroperationen
prüft, ob ein Bereich sortiert ist
(Algorithmus-Funktionsobjekt)
findet den größten sortierten Teilbereich
(Algorithmus-Funktionsobjekt)
sortiert einen Bereich von Elementen
(Algorithmus-Funktionsobjekt)
sortiert die ersten N Elemente eines Bereichs
(Algorithmus-Funktionsobjekt)
kopiert und sortiert teilweise einen Bereich von Elementen
(Algorithmus-Funktionsobjekt)
sortiert einen Bereich von Elementen unter Beibehaltung der relativen Reihenfolge äquivalenter Elemente
(Algorithmus-Funktionsobjekt)
findet das N-te Element, wenn der Bereich sortiert wäre
(Algorithmus-Funktionsobjekt)
Binäre Suchoperationen (auf sortierten Bereichen)
findet das erste Element, das nicht kleiner als der gegebene Wert ist, mittels binärer Suche
(Algorithmus-Funktionsobjekt)
findet das erste Element, das größer als der gegebene Wert ist, mittels binärer Suche
(Algorithmus-Funktionsobjekt)
bestimmt, ob ein Element in einem Bereich existiert, mittels binärer Suche
(Algorithmus-Funktionsobjekt)
findet den Bereich von Elementen, die dem gegebenen Wert entsprechen, mittels binärer Suche
(Algorithmus-Funktionsobjekt)
Mengenoperationen (auf sortierten Bereichen)
ermittelt, ob eine Sequenz eine Untersequenz 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 Vereinigungsmenge zweier Mengen
(Algorithmus-Funktionsobjekt)
Merge-Operationen (auf sortierten Bereichen)
führt zwei sortierte Bereiche zusammen
(Algorithmus-Funktionsobjekt)
führt zwei geordnete Bereiche direkt zusammen
(Algorithmus-Funktionsobjekt)
Heap-Operationen
prüft, ob der angegebene Bereich ein Max-Heap ist
(Algorithmus-Funktionsobjekt)
findet den größten Teilbereich, der ein Max-Heap ist
(Algorithmus-Funktionsobjekt)
erstellt einen Max-Heap aus einem Elementbereich
(Algorithmus-Funktionsobjekt)
fügt einem Max-Heap ein Element hinzu
(Algorithmus-Funktionsobjekt)
entfernt das größte Element aus einem Max-Heap
(Algorithmus-Funktionsobjekt)
wandelt einen Max-Heap in einen sortierten Elementbereich um
(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)
Lexikografische Vergleichsoperationen
vergleicht zwei Bereiche lexikografisch
(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)

Numerische Operationen

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

Spezialisierte <memory> Algorithmen

Definiert in Header <memory>
Definiert in Namensraum std::ranges
Objekt-(Stapel-)Konstruktion
erzeugt ein Objekt an einer gegebenen Adresse
(Algorithmus-Funktionsobjekt)
kopiert einen Bereich von Objekten 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 Bereich von Objekten in einen nicht initialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)
verschiebt eine Anzahl von Objekten in einen nicht initialisierten Speicherbereich
(Algorithmus-Funktionsobjekt)
erzeugt Objekte durch Default-Initialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)
erzeugt Objekte durch Default-Initialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Start und eine Anzahl
(Algorithmus-Funktionsobjekt)
erzeugt Objekte durch Wertinitialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Bereich
(Algorithmus-Funktionsobjekt)
erzeugt Objekte durch Wertinitialisierung in einem nicht initialisierten Speicherbereich, definiert durch einen Start und eine Anzahl
(Algorithmus-Funktionsobjekt)
Objekt (Batch-)Zerstörung
zerstört einen Bereich von Objekten
(Algorithmus-Funktionsobjekt)
zerstört eine Anzahl von Objekten in einem Bereich
(Algorithmus-Funktionsobjekt)
zerstört ein Objekt an einer gegebenen Adresse
(Algorithmus-Funktionsobjekt)

Spezialisierte <random> Algorithmen

Definiert in Header <random>
Definiert im Namensraum std::ranges
füllt einen Bereich mit Zufallszahlen aus einem gleichmäßigen Zufallsbitgenerator
(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)

Anmerkungen

Feature-Test Makro Wert Standard Merkmal
__cpp_lib_algorithm_default_value_type 202403L (C++26) Listeninitialisierung für Algorithmen
__cpp_lib_parallel_algorithm 202506L (C++26) Parallele Bereichsalgorithmen
__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 Richtiges Verhalten
P3136R1 C++20 niebloids durften als
spezielle Entitäten außer Funktionsobjekten spezifiziert werden
müssen als
Funktionsobjekte spezifiziert werden