Namespaces
Variants

sized-random-access-range

Von de.cppreference.net
 
 
Bereichsbibliothek
Bereichsadapter
 


template< class T >
concept /*sized-random-access-range*/ =
    ranges::random_access_range<T> &&
    ranges::sized_range<T>;
(seit C++26)
(nur zur Darstellung*)

Das nur zur Darstellung dienende Konzept sized-random-access-range spezifiziert die Anforderungen eines Bereichstyps, der seine Größe in konstanter Zeit kennt und wahlfreien Zugriff auf seine Elemente erlaubt.

Anmerkungen

sized-random-access-range wird von parallelen Bereichsalgorithmen verwendet, um unbegrenzte Bereichsargumente abzulehnen. Die Gründe dafür sind:

  • Für eine effiziente parallele Implementierung müssen die Grenzen des Iterationsraums bekannt sein. Andernfalls ist es schwierig, die „Teile-und-herrsche“-Strategie zur Erstellung von Arbeit für mehrere Ausführungsthreads anzuwenden.
  • Während serielle Bereichsalgorithmen die Übergabe eines „unendlichen“ Bereichs wie std::ranges::views::iota(0) erlauben, kann dies zu einer Endlosschleife führen. Der Nutzen davon im Falle einer parallelen Ausführung ist schwer vorstellbar. Die Anforderung, dass Datensequenzen begrenzt sind, verhindert potenziell Fehler zur Laufzeit.
  • Die Verwendung explizit begrenzter Ausgabebereiche folgt etablierten Praktiken der sicheren Programmierung, die empfehlen oder sogar vorschreiben, immer die Größe der Ausgabe anzugeben, um Datenänderungen außerhalb des Bereichs zu verhindern.
  • Wenn mehrere Eingabebereiche oder -sequenzen begrenzt sind, sollte ein Algorithmus normalerweise anhalten, sobald das Ende des kürzesten erreicht ist. Es gibt bereits Präzedenzfälle im Standard, bei denen ein Algorithmus zwei Sequenzen mit potenziell unterschiedlichen Eingabegrößen nimmt und die kleinere Größe als Anzahl der Iterationen wählt, die er durchführen wird, wie std::ranges::transform und std::ranges::mismatch.
  • Da die Ausgabedatensequenzen begrenzt sind, wird nicht mehr angenommen, dass sie genügend Platz für alle Eingaben haben. Es besteht also die Möglichkeit, dass einige Elemente der Eingabesequenzen von einem Algorithmus nicht verarbeitet werden, und es ist sinnvoll, dass er Iteratoren auf die Positionen in diesen Sequenzen zurückgibt, an denen die Verarbeitung gestoppt wurde.