std::ranges...s::take_view(3)
π std::ranges...s::take_view(3) π
okay bestie, welcome to the C++ Standard Libary manual page for std::ranges::views::take and std::ranges::take_view β manual name folded in right here near the top, no boring duplicated header line, periodt π.
π NAME π
std::ranges::views::take,std::ranges::take_view β std::ranges::views::take,std::ranges::take_view
β¨ Synopsis β¨
Defined in header <ranges>.
template< ranges::view V >
class take_view
(1) (since C++20)
: public ranges::view_interface<take_view<V>>
namespace views {
inline constexpr /* unspecified */ take = /* unspecified */;
(2) (since C++20)
}
πΈ Call signature πΈ
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto
take( R&& r, ranges::range_difference_t<R> count );
(since C++20)
template< class DifferenceType >
constexpr /* range adaptor closure */ take( DifferenceType&& count );
(since C++20)
- A range adaptor that represents view of the elements from an underlying sequence, starting at the beginning and ending at a given bound.
views::takeis aRangeAdaptorObject. The expressionviews::take(e, f)results in a view that represents the firstfelements frome. The result is not necessarily atake_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))>):
((void)f, decay-copy(e)), ifTis aranges::empty_view, except that the evaluations ofeandfare indeterminately sequenced;U(ranges::begin(e), ranges::begin(e) + std::min<D>(ranges::distance(e), f)), ifTis a specialization ofstd::span,std::basic_string_view, orranges::subrangethat models bothrandom_access_rangeandsized_range, whereUisstd::span<typename T::element_type>, ifTis a specialization ofstd::span;T, ifTis a specialization ofstd::basic_string_view;ranges::subrange<ranges::iterator_t<T>>, ifTis a specialization ofranges::subrange;ranges::iota_view(*ranges::begin(e), *(ranges::begin(e) + std::min<D>(ranges::distance(e), f))), ifTis a specialization ofranges::iota_viewthat models bothrandom_access_rangeandsized_range;
- otherwise, if
Tis a specialization ofranges::repeat_view:views::repeat(*e.value_, std::min<D>(ranges::distance(e), f)), if (since C++23)Tmodelssized_range; in that caseeis evaluated only once;views::repeat(*e.value_, static_cast<D>(e))otherwise;
- otherwise,
take_view(e, f).
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.
π«Ά Member functions π«Ά
constructorβ constructs atake_view(C++20) (public member function)baseβ returns a copy of the underlying (adapted) view (C++20) (public member function)beginβ returns an iterator to the beginning (C++20) (public member function)endβ returns an iterator or a sentinel to the end (C++20) (public member function)sizeβ returns the number of elements. Provided only if the underlying (adapted) range satisfiessized_range. (C++20) (public member function)
π Inherited from std::ranges::view_interface π
emptyβ returns whether the derived view is empty. Provided if it satisfiessized_rangeorforward_range. (C++20) (public member function ofstd::ranges::view_interface<D>)cbeginβ returns a constant iterator to the beginning of the range. (C++23) (public member function ofstd::ranges::view_interface<D>)cendβ returns a sentinel for the constant iterator of the range. (C++23) (public member function ofstd::ranges::view_interface<D>)operator boolβ returns whether the derived view is not empty. Provided ifranges::emptyis applicable to it. (C++20) (public member function ofstd::ranges::view_interface<D>)dataβ gets the address of derived view's data. Provided if its iterator type satisfiescontiguous_iterator. (C++20) (public member function ofstd::ranges::view_interface<D>)frontβ returns the first element in the derived view. Provided if it satisfiesforward_range. (C++20) (public member function ofstd::ranges::view_interface<D>)backβ returns the last element in the derived view. Provided if it satisfiesbidirectional_rangeandcommon_range. (C++20) (public member function ofstd::ranges::view_interface<D>)operator[]β returns the n^th element in the derived view. Provided if it satisfiesrandom_access_range. (C++20) (public member function ofstd::ranges::view_interface<D>)
π Deduction guides π
The page literally just has the heading Deduction guides here, bestie β no extra details to spill π«Ά.
π¦ Nested classes π¦
sentinelβ the sentinel type. (C++20)(exposition-only member class template*)
π Helper templates π
template< class T >
inline constexpr bool
(since C++20)
enable_borrowed_range<std::ranges::take_view<T>> =
std::ranges::enable_borrowed_range<T>;
This specialization of std::ranges::enable_borrowed_range makes take_view satisfy borrowed_range when the underlying view satisfies it.
π Example π
// Run this code
#include <algorithm>
#include <iostream>
#include <ranges>
auto print = [](char x){ std::cout << x; };
int main()
{
constexpr char pi[]{'3', '.', '1', '4', '1', '5', '9', '2'};
std::ranges::for_each(pi | std::ranges::views::take(6), print);
std::cout << '\n';
// safely takes 8 chars only, i.e. min(pi.size(), 42)
std::ranges::for_each(std::ranges::take_view{pi, 42}, print);
std::cout << '\n';
}
π Output: π
3.1415
3.141592
π Defect reports π
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
LWG 3407β Applied to: C++20. Behavior as published:views::takesometimes failed to construct a sized random access range. Correct behavior: the result type is adjusted so that construction is always valid.LWG 3494β Applied to: C++20. Behavior as published:take_viewwas never aborrowed_range. Correct behavior: it is aborrowed_rangeif its underlying view is.
π See also π
views::countedβ creates a subrange from an iterator and a count. (C++20) (customization point object)ranges::take_while_view,views::take_whileβ a view consisting of the initial elements of another view, until the first element on which a predicate returns false. (C++20) (class template) (range adaptor object)ranges::copy_nβ copies a number of elements to a new location. (C++20) (niebloid)
source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::ranges...s::take_view(3) β bye bestie, go slay your ranges π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms