Namespaces
Variants

std::ranges::get(std::ranges::subrange)

Aus de.cppreference.net
 
 
Ranges-Bibliothek
Range-Adaptoren
 
 
Definiert in Header <ranges>
template< std::size_t N, class I, class S, ranges::subrange_kind K >
    requires ((N == 0 && std::copyable<I>) || N == 1)
constexpr auto get( const ranges::subrange<I, S, K>& r );
(1) (seit C++20)
template< std::size_t N, class I, class S, ranges::subrange_kind K >
    requires (N < 2)
constexpr auto get( ranges::subrange<I, S, K>&& r );
(2) (seit C++20)
namespace std { using ranges::get; }
(3) (seit C++20)

Stellt Structured Binding-Unterstützung bereit.

1) Erhält den Iterator oder Sentinel von einem subrange Lvalue (oder einem const Rvalue), wenn N == 0 bzw. N == 1 ist.
2) Wie (1), außer dass es einen nicht-konstanten subrange Rvalue akzeptiert.
3) Die Überladungen (1,2) werden in den Namensraum std importiert, was ihre Verwendung vereinfacht und jede subrange mit einem kopierbaren Iterator zu einem paarähnlichen Typ macht.

Parameter

r - a subrange

Rückgabewert

1,2) Falls N gleich ​ 0 ​ ist, wird r. begin ( ) zurückgegeben. Andernfalls ( N ist 1 ) wird r. end ( ) zurückgegeben.

Beispiel

#include <array>
#include <iostream>
#include <iterator>
#include <ranges>
int main()
{
    std::array a{1, -2, 3, -4};
    std::ranges::subrange sub_a{std::next(a.begin()), std::prev(a.end())};
    std::cout << *std::ranges::get<0>(sub_a) << ' '   // == *(begin(a) + 1)
              << *std::ranges::get<1>(sub_a) << '\n'; // == *(end(a) - 1)
    *std::get<0>(sub_a) = 42; // OK
//  *std::get<2>(sub_a) = 13; // Error: index can only be 0 or 1
}

Ausgabe:

-2 -4

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
LWG 3589 C++20 Überladung ( 1 ) kopiert begin_ falls N gleich ​ 0 ​ ist, aber I könnte nicht copyable modellieren Constraints hinzugefügt

Siehe auch

Structured binding (C++17) bindet die angegebenen Namen an Teilobjekte oder Tupel-Elemente des Initialisierers
greift auf das angegebene Tupel-Element zu
(Funktions-Template)
greift auf ein Element eines pair zu
(Funktions-Template)
greift auf ein Element eines array zu
(Funktions-Template)
liest den Wert der Variante mit gegebenem Index oder Typ (falls der Typ eindeutig ist), wirft Fehler bei Fehler
(Funktions-Template)
erhält eine Referenz auf Real- oder Imaginärteil eines std::complex
(Funktions-Template)