Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <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) (depuis 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) (depuis C++20)
namespace std { using ranges :: get ; }
(3) (depuis C++20)

Fournit la prise en charge de la structured binding .

1) Obtient l'itérateur ou le sentinelle d'une lvalue (ou d'une rvalue constante) subrange lorsque N == 0 ou N == 1 , respectivement.
2) Identique à (1) , sauf qu'il prend une valeur rvalue subrange non constante.
3) Les surcharges (1,2) sont importées dans l'espace de noms std , ce qui simplifie leur utilisation et rend chaque subrange avec un itérateur copiable un type pair-like .

Table des matières

Paramètres

r - a subrange

Valeur de retour

1,2) Si N est 0 , retourne r. begin ( ) . Sinon ( N est 1 ), retourne r. end ( ) .

Exemple

#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
}

Sortie :

-2 -4

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3589 C++20 la surcharge ( 1 ) copie begin_ si N est 0 , mais I pourrait ne pas modéliser copyable contraintes ajoutées

Voir aussi

Structured binding (C++17) lie les noms spécifiés aux sous-objets ou éléments de tuple de l'initialiseur
accède à l'élément spécifié du tuple
(modèle de fonction)
accède à un élément d'une pair
(modèle de fonction)
accède à un élément d'un array
(modèle de fonction)
lit la valeur du variant donné l'index ou le type (si le type est unique), lance une exception en cas d'erreur
(modèle de fonction)
obtient une référence à la partie réelle ou imaginaire d'un std::complex
(modèle de fonction)