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

< cpp‎ | ranges‎ | drop view

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

返回指向 `drop_view` 的首元素的迭代器，即指向底层视图第 N 元素的迭代器，或若它有少于 N 各元素则为指向底层视图末尾的迭代器。

若 `V` 不是 `random_access_range` 或 `sized_range` ，为提供 `range` 概念所要求的的均摊常数时间复杂度，重载 (1) 在 `drop_view` 对象内缓存结果以供后继调用。

### 参数

（无）

### 返回值

ranges::next(ranges::begin(base_), count_, ranges::end(base_)) ，其中 `base_` 为底层视图，而 `count_` 为要跳过的元素数。

### 示例

    #include <algorithm>
    #include <array>
    #include <iostream>
    #include <iterator>
    #include <ranges>

    int main()
    {
        std::array hi{ 'H','e','l','l','o',',',' ','C','+','+','2','0','!' };

        std::ranges::for_each(hi, [](const char c){ std::cout << c; });
        std::cout << '\n';

        const auto c = std::distance(hi.begin(), std::ranges::find(hi, 'C'));
        auto cxx = std::ranges::drop_view{ hi, c };
        std::cout << "*drop_view::begin() == '" << *cxx.begin() << "'\n";

    //  *cxx.begin() = 'c'; // 未定义： 'views' 要用作观察器

        for (char c : cxx) { std::cout << c; }
        std::cout << '\n';
    }

输出：

    Hello, C++20!
    *drop_view::begin() == 'C'
    C++20!

### 缺陷报告

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

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3482 | C++20 | const 重载能以不具大小范围调用 | const 重载要求 `sized_range`

### 参阅

end (C++20) | 返回指向末尾的迭代器或哨位 (公开成员函数)
ranges::begin (C++20) | 返回指向范围起始的迭代器 (定制点对象)
ranges::end (C++20) | 返回指示范围结尾的哨位 (定制点对象)