std::ranges::get(std::ranges::subrange)
Aus de.cppreference.net
| 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
Diesen Code ausführen
#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 |
|
(C++11)
|
greift auf das angegebene Tupel-Element zu
(Funktions-Template) |
|
(C++11)
|
greift auf ein Element eines
pair
zu
(Funktions-Template) |
|
(C++11)
|
greift auf ein Element eines
array
zu
(Funktions-Template) |
|
(C++17)
|
liest den Wert der Variante mit gegebenem Index oder Typ (falls der Typ eindeutig ist), wirft Fehler bei Fehler
(Funktions-Template) |
|
(C++26)
|
erhält eine Referenz auf Real- oder Imaginärteil eines
std::complex
(Funktions-Template) |