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 >

V 简单视图 时(即当 V const V 是具有相同迭代器和哨兵类型的视图时),重载 (1) 不参与重载决议。

目录

参数

(无)

返回值

结果取决于可能带有 const 限定符的底层视图类型 Base 所满足的概念,对于 ( 1 ) 该类型为 V ,对于 ( 2 ) 该类型为 const V

base_ 为底层视图, count_ 为底层计数器(若 take_view 被默认初始化则等于 0 )。

底层视图类型
满足 ...
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++ 标准。

缺陷报告 应用于 发布时的行为 正确行为
P2393R1 C++20 有符号和无符号整数类类型之间的隐式转换可能失败 改为显式转换

参见

返回指向末尾的迭代器或哨位
(公开成员函数)
追踪到范围末尾距离的迭代器适配器
(类模板)
(C++20)
比较哨位与从 take_view::begin 返回的迭代器
(函数)