< cpp‎ | ranges‎ | drop view
Ranges library
Range access
Range conversions
Range primitives

Dangling iterator handling
Range concepts

Range factories
Range adaptors
Range generators
Range adaptor objects
Range adaptor closure objects
Helper items
(until C++23)(C++23)

Member functions
Deduction guides
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.


[edit] Parameters


[edit] 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.

[edit] Example

#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';


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

[edit] 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

[edit] See also

returns an iterator or a sentinel to the end
(public member function) [edit]
returns an iterator to the beginning of a range
(customization point object) [edit]
returns a sentinel indicating the end of a range
(customization point object) [edit]