Namespaces
Variants

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

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

Возвращает итератор на первый элемент take_view .

1) Возвращает std:: counted_iterator или ranges:: iterator_t < V > .
2) Возвращает std:: counted_iterator или ranges:: iterator_t < const V > .

Перегрузка (1) не участвует в разрешении перегрузки, если V является простым представлением (то есть, если V и const V являются представлениями с одинаковыми типами итераторов и ограничителей).

Содержание

Параметры

(нет)

Возвращаемое значение

Результат зависит от концептов, удовлетворяемых возможно const-квалифицированным базовым типом представления Base , который является V для ( 1 ) или const V для ( 2 ) .

Пусть base_ будет базовым представлением, count_ будет базовым счетчиком (равным 0 если take_view был инициализирован по умолчанию).

Базовый тип представления
удовлетворяет ...
random_access_range
да нет
sized_range да ranges:: begin ( base_ ) std:: counted_iterator ( ranges:: begin ( base_ ) ,
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) )
нет std:: counted_iterator ( ranges:: begin ( base_ ) , count_ )

Пример

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

Вывод:

∀x
Ax

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
P2393R1 C++20 неявные преобразования между знаковыми и беззнаковыми целочисленными типами могут завершаться неудачей сделаны явными

Смотрите также

возвращает итератор или страж к концу
(публичная функция-член)
адаптер итератора, отслеживающий расстояние до конца диапазона
(шаблон класса)
(C++20)
сравнивает страж с итератором, возвращённым из take_view::begin
(функция)