Namespaces
Variants

std::ranges:: ref_view

From cppreference.net
Ranges library
Range adaptors
Definiert im Header <ranges>
template < ranges:: range R >

erfordert std:: is_object_v < R >
class ref_view

: public ranges:: view_interface < ref_view < R >>
(seit C++20)

ref_view ist eine view der Elemente eines anderen range . Sie umschließt eine Referenz auf diesen range .

Inhaltsverzeichnis

Datenmitglieder

Mitglied Beschreibung
R* r_ ein Zeiger auf den zugrundeliegenden Bereich
( Nur zur Veranschaulichung dienendes Mitgliedsobjekt* )

Memberfunktionen

Konstruiert einen ref_view , der auf den gegebenen Bereich verweist
(öffentliche Elementfunktion)
gibt die Referenz auf den referenzierten Bereich zurück
(öffentliche Elementfunktion)
gibt den Startiterator des referenzierten Bereichs zurück
(öffentliche Elementfunktion)
gibt den Sentinel des referenzierten Bereichs zurück
(öffentliche Elementfunktion)
prüft, ob der referenzierte Bereich leer ist
(öffentliche Elementfunktion)
gibt die Größe des referenzierten sized_range zurück
(öffentliche Elementfunktion)
gibt die ungefähre Größe des referenzierten approximately_sized_range zurück
(öffentliche Elementfunktion)
gibt den Zeiger auf den Anfang des referenzierten contiguous_range zurück
(öffentliche Elementfunktion)
Geerbt von std::ranges::view_interface
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
(C++23)
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur wenn ranges::empty darauf anwendbar ist
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie forward_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie bidirectional_range und common_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das n te Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie random_access_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )

std::ranges::ref_view:: ref_view

template < /*different-from*/ < ref_view > T >

requires std:: convertible_to < T, R & > &&
requires { _FUN ( std:: declval < T > ( ) ) ; }

constexpr ref_view ( T && t ) ;
(seit C++20)

Initialisiert r_ mit std:: addressof ( static_cast < R & > ( std:: forward < T > ( t ) ) ) .

/*different-from*/ < T, U > ist genau dann erfüllt, wenn std:: remove_cvref_t < T > und std:: remove_cvref_t < U > nicht denselben Typ darstellen, und Überladungen von _FUN deklariert sind als void _FUN ( R & ) ; void _FUN ( R && ) = delete ; .

Parameter

t - zu referenzierender Bereich

std::ranges::ref_view:: base

constexpr R & base ( ) const ;
(seit C++20)

Gibt * r_ zurück.

std::ranges::ref_view:: begin

constexpr ranges:: iterator_t < R > begin ( ) const ;
(seit C++20)

Gibt ranges:: begin ( * r_  ) zurück.

**Übersetzungserläuterungen:** - "Returns" wurde zu "Gibt" übersetzt - "back" wurde zu "zurück" ergänzt (da im Deutschen "gibt ... zurück" die korrekte Form ist) - "(since C++20)" wurde zu "(seit C++20)" übersetzt - Alle HTML-Tags, Attribute und Code-Blöcke wurden unverändert beibehalten - C++-spezifische Begriffe wie "constexpr", "iterator_t", "begin" etc. wurden nicht übersetzt - Die Formatierung und Struktur der originalen HTML wurde vollständig erhalten

std::ranges::ref_view:: end

constexpr ranges:: sentinel_t < R > end ( ) const ;
(seit C++20)

Gibt ranges:: end ( * r_  ) zurück.

std::ranges::ref_view:: empty

constexpr bool empty ( ) const
requires requires { ranges:: empty ( * r_ ) ; } ;
(seit C++20)

Gibt ranges:: empty ( * r_  ) zurück.

std::ranges::ref_view:: size

constexpr auto size ( ) const
requires ranges:: sized_range < R > ;
(seit C++20)

Gibt ranges:: size ( * r_  ) zurück.

std::ranges::ref_view:: reserve_hint

constexpr auto size ( ) const
requires ranges :: approximately_sized_range < R > ;
(seit C++26)

Gibt ranges :: reserve_hint ( * r_  ) zurück.

std::ranges::ref_view:: data

constexpr auto data ( ) const
requires ranges:: contiguous_range < R > ;
(seit C++20)

Gibt ranges:: data ( * r_  ) zurück.

Deduktionsanleitungen

template < class R >
ref_view ( R & ) - > ref_view < R > ;
(seit C++20)

Hilfsvorlagen

template < class T >
constexpr bool enable_borrowed_range < ranges :: ref_view < T >> = true ;
(seit C++20)

Diese Spezialisierung von std::ranges::enable_borrowed_range bewirkt, dass ref_view die Anforderungen von borrowed_range erfüllt.

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range und reserve_hint

Beispiel

#include <iostream>
#include <ranges>
int main()
{
    const std::string s{"cosmos"};
    const std::ranges::take_view tv{s, 3};
    const std::ranges::ref_view rv{tv};
    std::cout
        << std::boolalpha
        << "call empty(): " << rv.empty() << '\n'
        << "call size() : " << rv.size() << '\n'
        << "call begin(): " << *rv.begin() << '\n'
        << "call end()  : " << *(rv.end() - 1) << '\n'
        << "call data() : " << rv.data() << '\n'
        << "call base() : " << rv.base().size() << '\n' // ~> tv.size()
        << "range-for   : ";
    for (const auto c : rv)
        std::cout << c;
    std::cout << '\n';
}

Ausgabe:

call empty(): false
call size() : 3
call begin(): c
call end()  : s
call data() : cosmos
call base() : 3
range-for   : cos

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
P2325R3 C++20 Standardkonstruktor wurde bereitgestellt da
view muss default_initializable sein
zusammen mit der Anforderung entfernt

Siehe auch

CopyConstructible und CopyAssignable Referenz-Wrapper
(Klassen-Template)
eine view mit eindeutigem Besitz eines range
(Klassen-Template)
eine view die alle Elemente eines range enthält
(Alias-Template) (Range-Adapter-Objekt)