Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque des ranges
Adaptateurs de range
 
 
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 le support de la liaison structurée.

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

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)