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

From cppreference.com
< cpp‎ | ranges‎ | drop view

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

Returns an iterator to the first element of the `drop_view`, that is, an iterator to the N-th element of the underlying view, or to the end of the underlying view if it has less than N elements.

If V is not a `random_access_range` or a `sized_range`, in order to provide the amortized constant time complexity required by the `range` concept, the overload (1) caches the result within the `drop_view` object for use on subsequent calls.

### Parameters

(none)

### Return value

ranges::next(ranges::begin(base_), count_, ranges::end(base_)), where base_ is the underlying view, and count_ is the number of elements to skip.

### Example

Run this code

    #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'; // undefined: 'views' are to be used as observers

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

Output:

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

### Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR | Applied to | Behavior as published | Correct behavior
--- | --- | --- | ---
LWG 3482 | C++20 | the const overload can be called with unsized ranges | the const overload requires `sized_range`

### See also

end (C++20) | returns an iterator or a sentinel to the end (public member function)
ranges::begin (C++20) | returns an iterator to the beginning of a range (customization point object)
ranges::end (C++20) | returns a sentinel indicating the end of a range (customization point object)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/drop_view/begin&oldid=126386"