Namespaces
Variants

std::ranges::take_view<V>:: begin

From cppreference.net
Ranges library
Range adaptors
constexpr auto begin ( ) requires ( ! /*simple-view*/ < V > ) ;
(1) (depuis C++20)
constexpr auto begin ( ) const requires ranges:: range < const V > ;
(2) (depuis C++20)

Retourne un itérateur vers le premier élément de la take_view .

2) Retourne un std:: counted_iterator ou un ranges:: iterator_t < const V > .

La surcharge (1) ne participe pas à la résolution de surcharge si V est une vue simple (c'est-à-dire si V et const V sont des vues avec les mêmes types d'itérateur et de sentinelle).

Table des matières

Paramètres

(aucun)

Valeur de retour

Le résultat dépend des concepts satisfaits par le type de vue sous-jacent éventuellement qualifié const Base , qui est V pour ( 1 ) ou const V pour ( 2 ) .

Soit base_ la vue sous-jacente, count_ le compteur sous-jacent (égal à 0 si take_view a été initialisé par défaut).

Le type de vue sous-jacent
satisfait ...
random_access_range
oui non
sized_range oui ranges:: begin ( base_ ) std:: counted_iterator ( ranges:: begin ( base_ ) ,
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) )
non std:: counted_iterator ( ranges:: begin ( base_ ) , count_ )

Exemple

#include <concepts>
#include <forward_list>
#include <iostream>
#include <ranges>
#include <string_view>
#include <type_traits>
using namespace std::literals;
int main()
{
    {
        static constexpr auto v = {"∀x"sv, "∃y"sv, "ε"sv, "δ"sv};
        auto view = std::ranges::take_view(v, 8);
        auto iter = view.begin();
        std::cout << *iter << '\n';
        static_assert(
            std::ranges::sized_range<decltype(v)> and
            std::ranges::random_access_range<decltype(v)> and
            std::is_same_v<decltype(iter), decltype(std::ranges::begin(v))>
        );
    }
    {
        std::forward_list v = {"Ax"sv, "Ey"sv, "p"sv, "q"sv};
        auto view = std::ranges::take_view(v, 8);
        auto iter = view.begin();
        std::cout << *iter << '\n';
        static_assert(
            not std::ranges::sized_range<decltype(v)> and
            not std::ranges::random_access_range<decltype(v)> and
            std::is_same_v<decltype(iter),
                std::counted_iterator<
                    std::forward_list<std::string_view>::iterator>>
        );
    }
}

Sortie :

∀x
Ax

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é
P2393R1 C++20 les conversions implicites entre les types integer-class signés et non signés peuvent échouer rendues explicites

Voir aussi

retourne un itérateur ou un sentinelle vers la fin
(fonction membre publique)
adaptateur d'itérateur qui suit la distance jusqu'à la fin de la plage
(modèle de classe)
(C++20)
compare un sentinelle avec un itérateur retourné par take_view::begin
(fonction)