Namespaces
Variants

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

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

Devuelve un iterador al primer elemento del take_view .

2) Devuelve un std:: counted_iterator o un ranges:: iterator_t < const V > .

La sobrecarga (1) no participa en la resolución de sobrecarga si V es una vista simple (es decir, si V y const V son vistas con los mismos tipos de iterador y centinela).

Contenidos

Parámetros

(ninguno)

Valor de retorno

El resultado depende de los conceptos satisfechos por el tipo de vista subyacente posiblemente calificado con const Base , que es V para ( 1 ) o const V para ( 2 ) .

Sea base_ la vista subyacente, count_ el contador subyacente (igual a 0 si take_view fue inicializado por defecto).

El tipo de vista subyacente
satisface ...
random_access_range
no
sized_range ranges:: begin ( base_ ) std:: counted_iterator ( ranges:: begin ( base_ ) ,
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) )
no std:: counted_iterator ( ranges:: begin ( base_ ) , count_ )

Ejemplo

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

Salida:

∀x
Ax

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Applied to Behavior as published Correct behavior
P2393R1 C++20 las conversiones implícitas entre tipos integer-class con signo y sin signo pueden fallar se hicieron explícitas

Véase también

devuelve un iterador o un centinela al final
(función miembro pública)
adaptador de iterador que rastrea la distancia hasta el final del rango
(plantilla de clase)
(C++20)
compara un centinela con un iterador devuelto desde take_view::begin
(función)