std::ranges::drop_view<V>::begin
requires (!(/*simple-view*/<V> &&
ranges::random_access_range <const V> &&
requires ranges::random_access_range <const V> &&
Returns an iterator to the first element of the drop_view
, that is, an iterator to the Nth 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 underlying cache_
object for use on subsequent calls.
[edit] Return value
ranges::next (ranges::begin (base_
),
count_
, ranges::end (base_
)).
[edit] Example
#include <array> #include <concepts> #include <iostream> #include <iterator> #include <ranges> void println(std::ranges::range auto const& range) { for (auto const& elem : range) std::cout << elem; std::cout << '\n'; } int main() { std::array hi{'H', 'e', 'l', 'l', 'o', ',', ' ', 'C', '+', '+', '2', '0', '!'}; println(hi); const auto pos = std::distance (hi.begin(), std::ranges::find (hi, 'C')); auto cxx = std::ranges::drop_view {hi, pos}; std::cout << "*drop_view::begin() == '" << *cxx.begin() << "'\n"; // *cxx.begin() = 'c'; // undefined: 'views' are to be used as observers println(cxx); }
Output:
Hello, C++20! *drop_view::begin() == 'C' C++20!
[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
|