FreeBSD Manual Pages
std::ranges::subrange(3) C++ Standard Libary std::ranges::subrange(3) NAME std::ranges::subrange - std::ranges::subrange Synopsis Defined in header <ranges> template< std::input_or_output_iterator I, std::sentinel_for<I> S = I, ranges::subrange_kind K = std::sized_sentinel_for<S, I> ? ranges::subrange_kind::sized : ranges::subrange_kind::unsized (since C++20) > requires (K == ranges::subrange_kind::sized || !std::sized_sentinel_for<S, I>) class subrange : public ranges::view_interface<subrange<I, S, K>> The subrange class template combines together an iterator and a sen- tinel into a single view. Additionally, the subrange is a sized_range whenever the final tem- plate parameter is subrange_kind::sized (which happens when std::sized_sentinel_for<S, I> is satisfied or when size is passed explicitly as a constructor argu- ment). The size record is needed to be stored if and only if std::sized_sen- tinel_for<S, I> is false and K is subrange_kind::sized. Member functions constructor creates a new subrange (C++20) (public member function) operator PairLike converts the subrange to a pair-like type (C++20) (public member function) Observers begin obtains the iterator (C++20) (public member function) end obtains the sentinel (C++20) (public member function) empty checks whether the subrange is empty (C++20) (public member function) size obtains the size of the subrange (C++20) (public member function) Iterator operations advance advances the iterator by given distance (C++20) (public member function) prev obtains a copy of the subrange with its iterator decremented by a (C++20) given distance (public member function) next obtains a copy of the subrange with its iterator advanced by a (C++20) given distance (public member function) Inherited from std::ranges::view_interface operator bool Returns whether the derived view is not empty. Provided if (C++20) ranges::empty is applicable to it. (public member function of std::ranges::view_in- terface<D>) data Gets the address of derived view's data. Provided if its iterator (C++20) type satisfies contiguous_iterator. (public member function of std::ranges::view_in- terface<D>) front Returns the first element in the derived view. Provided if it (C++20) satisfies forward_range. (public member function of std::ranges::view_in- terface<D>) back Returns the last element in the derived view. Pro- vided if it (C++20) satisfies bidirectional_range and common_range. (public member function of std::ranges::view_in- terface<D>) operator[] Returns the nth element in the derived view. Pro- vided if it (C++20) satisfies random_access_range. (public member function of std::ranges::view_in- terface<D>) Deduction guides Non-member functions get(std::ranges::subrange) obtains iterator or sentinel from a std::ranges::subrange (C++20) (function template) Helper types ranges::subrange_kind specifies whether a std::ranges::subrange (C++20) models std::ranges::sized_range (enum) std::tuple_size<std::ranges::subrange> obtains the number of com- ponents of a (C++20) std::ranges::subrange (class template special- ization) std::tuple_element<std::ranges::subrange> obtains the type of the iterator or the (C++20) sentinel of a std::ranges::subrange (class template special- ization) Helper templates template<class I, class S, ranges::subrange_kind K> inline constexpr bool enable_borrowed_range<ranges::subrange<I, S, K>> = true; This specialization of std::ranges::enable_borrowed_range makes sub- range satisfy borrowed_range. Example // Run this code #include <iostream> #include <map> #include <ranges> #include <string_view> template <class V> void mutate(V& v) { v += 'A' - 'a'; } template <class K, class V> void mutate_map_values(std::multimap<K, V>& m, K k) { auto [first, last] = m.equal_range(k); for (auto& [_, v] : std::ranges::subrange(first, last)) { mutate(v); } } int main() { auto print = [](std::string_view rem, auto const& mm) { std::cout << rem << "{ "; for (const auto& [k, v] : mm) std::cout << "{" << k << ",'" << v << "'} "; std::cout << "}\n"; }; std::multimap<int,char> mm{ {4,'a'}, {3,'-'}, {4,'b'}, {5,'-'}, {4,'c'} }; print("Before: ", mm); mutate_map_values(mm, 4); print("After: ", mm); } Output: Before: { {3,'-'} {4,'a'} {4,'b'} {4,'c'} {5,'-'} } After: { {3,'-'} {4,'A'} {4,'B'} {4,'C'} {5,'-'} } See also ranges::view_interface helper class template for defining a view, using the (C++20) curiously recurring template pattern (class template) http://cppreference.com 2022.07.31 std::ranges::subrange(3)
NAME | Synopsis | Member functions | Observers | Iterator operations | Non-member functions | Helper types | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::subrange&sektion=3&manpath=FreeBSD+Ports+15.0>
