Namensräume
Varianten
Aktionen

std::ranges::views:: counted

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
Definiert in der Header-Datei <ranges>
inline constexpr /*unspecified*/ counted = /*unspecified*/;
(seit C++20)
Aufruf-Signatur
template< class Iterator, class DifferenceType >

    requires /* siehe unten */

constexpr /*span-or-subrange*/ counted( Iterator&& it, DifferenceType&& count );
(seit C++20)

Eine gezählte Ansicht (counted view) präsentiert eine view der Elemente des gezählten Bereichs [in) für einen Iterator i und eine nicht-negative Ganzzahl n.

Ein gezählter Bereich [in) besteht aus den n Elementen, beginnend mit dem Element, auf das i zeigt, und bis zu, aber nicht einschließlich, dem Element, falls vorhanden, auf das das Ergebnis von n Anwendungen von ++i zeigt.

Wenn n == 0 ist, ist der gezählte Bereich gültig und leer. Andernfalls ist der gezählte Bereich nur gültig, wenn n positiv ist, i dereferenzierbar ist und [++i--n) ein gültiger gezählter Bereich ist.

Formal gilt: Wenn it und count Ausdrücke sind, T std::decay_t<decltype((it))> ist und D std::iter_difference_t<T> ist, dann

wenn T input_or_output_iterator modelliert und decltype((count)) std::convertible_to<D> modelliert,
Andernfalls ist views::counted(it, count) ill-formed.

Inhalt

Customization Point Objects

Der Name views::counted bezeichnet ein Customization Point Object, das ist ein konstantes Function Object eines literal semiregular Klassentyps. Zu Ausstellungszwecken wird die cv-unqualified Version seines Typs als __counted_fn bezeichnet.

Alle Instanzen von __counted_fn sind gleich. Die Auswirkungen des Aufrufs verschiedener Instanzen vom Typ __counted_fn mit denselben Argumenten sind äquivalent, unabhängig davon, ob der die Instanz bezeichnende Ausdruck ein lvalue oder rvalue ist und ob er const-qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Somit kann views::counted frei kopiert werden und seine Kopien können austauschbar verwendet werden.

Gegeben eine Menge von Typen Args..., wenn std::declval<Args>()... die obigen Anforderungen für Argumente an views::counted erfüllt, dann modelliert __counted_fn

Andernfalls nimmt kein Funktionsaufrufoperator von __counted_fn an der Überladungsauflösung teil.

[edit] Anmerkungen

views::counted prüft nicht, ob der Bereich lang genug ist, um alle count Elemente bereitzustellen: Verwenden Sie views::take, wenn diese Prüfung notwendig ist.

[edit] Beispiel

#include <iostream>
#include <ranges>
 
int main()
{
    const int a[]{1, 2, 3, 4, 5, 6, 7};
    for (int i : std::views::counted(a, 3))
        std::cout << i << ' ';
    std::cout << '\n';
 
    const auto il = {1, 2, 3, 4, 5};
    for (int i : std::views::counted(il.begin() + 1, 3))
        std::cout << i << ' ';
    std::cout << '\n';
}

Ausgabe

1 2 3
2 3 4

[edit] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
P2393R1 C++20 Implizite Konvertierung von einem Integer-Klassen-Typ nach std::size_t kann ungültig sein explizit gemacht

[edit] Siehe auch

ein view, der aus den ersten N Elementen eines anderen view besteht
(Klassen-Template) (Range-Adaptor-Objekt)[edit]
kombiniert ein Iterator-Sentinel-Paar zu einer view
(Klassenschablone) [edit]
Iterator-Adapter, der den Abstand zum Ende des Bereichs verfolgt
(Klassenvorlage) [bearbeiten]
Gibt die Anzahl der Elemente zurück, die bestimmte Kriterien erfüllen
(Algorithmus-Funktionsobjekt)[edit]