Namespaces
Variants

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

С сайта ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
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 является простым представлением (simple view) (то есть, если 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
(функция)