inline constexpr /* unspecified */ take = /* unspecified */;
Call signature
(since C++20)template< class DifferenceType >
constexpr /* range adaptor closure */ take( DifferenceType&& count );
A range adaptor that represents
view
of the elements from an underlying sequence, starting at the beginning and ending at a given bound.
2)views::take
is a
RangeAdaptorObject. The expression
views::take(e, f)results in a view that represents the first
felements from
e. The result is not necessarily a
take_view
.
views::take(e, f) is expression-equivalent to (where T
is std::remove_cvref_t<decltype((e))> and D
is ranges::range_difference_t<decltype((e))>):
decay-copy(e)), if T
is a ranges::empty_view, except that the evaluations of e and f are indeterminately sequenced;T
is a specialization of std::span, std::basic_string_view, or ranges::subrange that models both random_access_range
and sized_range
, where U
isT
is a specialization of std::span;T
, if T
is a specialization of std::basic_string_view;T
is a specialization of ranges::subrange;T
is a specialization of ranges::iota_view that models both random_access_range
and sized_range
;In all cases,
decltype((f))must model
std::convertible_to<D>.
take_view
models the concepts contiguous_range
, random_access_range
, bidirectional_range
, forward_range
, input_range
, and sized_range
when the underlying view V
models respective concepts. It models common_range
when the underlying view V
models both random_access_range
and sized_range
.
V
base_
the underlying view
count_
the number of elements to take
take_view
sized_range
approximately_sized_range
sized_range
or forward_range
std::ranges::view_interface<D>
) [edit] returns a constant iterator to the beginning of the range
std::ranges::view_interface<D>
) [edit] returns a sentinel for the constant iterator of the range
std::ranges::view_interface<D>
) [edit] returns whether the derived view is not empty, provided only if ranges::empty is applicable to it
std::ranges::view_interface<D>
) [edit] gets the address of derived view's data, provided only if its iterator type satisfies contiguous_iterator
std::ranges::view_interface<D>
) [edit] returns the first element in the derived view, provided if it satisfies forward_range
std::ranges::view_interface<D>
) [edit] returns the last element in the derived view, provided only if it satisfies bidirectional_range
and common_range
std::ranges::view_interface<D>
) [edit] returns the n
th element in the derived view, provided only if it satisfies random_access_range
std::ranges::view_interface<D>
) [edit] [edit] Deduction guides [edit] Nested classes the sentinel type
This specialization of ranges::enable_borrowed_range makes take_view
satisfy borrowed_range
when the underlying view satisfies it.
#include <algorithm> #include <iostream> #include <ranges> int main() { namespace views = std::views; auto print = [](char x){ std::cout << x; }; for (const char nums[]{'1', '2', '3'}; int n : views::iota(0, 5)) { std::cout << "take(" << n << "): "; // safely takes only upto min(n, nums.size()) elements: std::ranges::for_each(nums | views::take(n), print); std::cout << '\n'; } }
Output:
take(0): take(1): 1 take(2): 12 take(3): 123 take(4): 123[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 3407 C++20views::take
sometimes failed to
take_view
was never a borrowed_range
it is a borrowed_range
if its underlying view is [edit] See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4