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

< cpp‎ | ranges‎ | take view

constexpr auto begin() requires (!__SimpleView<V>); | (1) | (C++20 起)
constexpr auto begin() const requires ranges::range<const V>; | (2) | (C++20 起)

返回指向 `take_view` 首元素的迭代器。

1) 返回 std::counted_iterator 或 ranges::range_iterator_t<V> 。
2) 返回 std::counted_iterator 或 ranges::range_iterator_t<const V> 。

重载 (1) 仅若 `V` 是简单视图（即若 `V` 与 `const V` 均为视图且拥有相同迭代器与哨位类型）才参与重载决议。

### 参数

（无）

### 返回值

结果依赖于可能为 const 限定的底层视图类型 `_Base` ，即 V （对于重载 (1) ）或 const V （对于重载 (2) ）所满足的概念。

令 `base_` 为底层视图， `count_` 为传递给构造函数的数（若默认初始化则为 ​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 <ranges>
    #include <iostream>
    #include <string_view>
    using namespace std::literals;

    int main()
    {
        static constexpr auto sv = {"∀x"sv, "∃y"sv, "ε"sv, "δ"sv};

        std::cout << *std::ranges::take_view(sv, 8).begin() << '\n';
    }

输出：

    ∀x

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
P2393R1 | C++20 | 有符号与无符号整数类间的隐式转换可能失败 | 使之为显式

### 参阅

end (C++20) | 返回指向末尾的迭代器或哨位 (公开成员函数)
counted_iterator (C++20) | 对到范围结尾距离进行跟踪的迭代器适配器 (类模板)
operator== (C++20) | 比较哨位与从 `take_view::begin` 返回的迭代器 (函数)