Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | ranges‎ | subrange
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <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)

Bietet Unterstützung für strukturierte Bindungen.

1) Holt den Iterator oder Sentinel aus einem subrange lvalue (oder einem const rvalue), wenn N == 0 oder N == 1, entsprechend.
2) Wie (1), außer dass es einen non-const subrange rvalue nimmt.
3) Überladungen (1,2) werden in den Namespace std importiert, was ihre Verwendung vereinfacht und jeden subrange mit einem kopierbaren Iterator zu einem paarähnlichen Typ macht.

Inhalt

[bearbeiten] Parameter

r - ein subrange

[bearbeiten] Rückgabewert

1,2) Wenn N 0 ist, wird r.begin() zurückgegeben. Andernfalls (wenn N 1 ist), wird r.end() zurückgegeben.

[bearbeiten] 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

[bearbeiten] 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_, wenn N 0 ist, aber I modelliert möglicherweise copyable nicht Eingeführte Einschränkungen

[bearbeiten] Siehe auch

Strukturierte Bindung (C++17) bindet die angegebenen Namen an Unterobjekte oder Tuple-Elemente des Initialisierers[bearbeiten]
greift auf ein Tupel-Element gemäß Spezifikation zu
(function template) [bearbeiten]
greift auf ein Element eines pair zu
(Funktionsvorlage) [edit]
greift auf ein Element eines arrays zu
(Funktionstemplate) [bearbeiten]
liest den Wert des variants anhand des Index oder des Typs (wenn der Typ eindeutig ist), wirft bei Fehler
(function template) [bearbeiten]
erhält eine Referenz auf den realen oder imaginären Teil von std::complex
(function template) [edit]