GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::ranges::subrange(3) C++ Standard Libary std::ranges::subrange(3)

std::ranges::subrange - std::ranges::subrange


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 sentinel into a
single view.


Additionally, the subrange is a sized_range whenever the final template 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 argument). The size
record is needed to be stored if and only if std::sized_sentinel_for<S, I> is false
and K is subrange_kind::sized.


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)


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)


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_interface<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_interface<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_interface<D>)
back Returns the last element in the derived view. Provided if it
(C++20) satisfies bidirectional_range and common_range.
(public member function of std::ranges::view_interface<D>)
operator[] Returns the nth element in the derived view. Provided if it
(C++20) satisfies random_access_range.
(public member function of std::ranges::view_interface<D>)


Deduction guides


get(std::ranges::subrange) obtains iterator or sentinel from a std::ranges::subrange
(C++20) (function template)


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 components of a
(C++20) std::ranges::subrange
(class template specialization)
std::tuple_element<std::ranges::subrange> obtains the type of the iterator or the
(C++20) sentinel of a std::ranges::subrange
(class template specialization)


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 subrange satisfy
borrowed_range.

// 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);
}


Before: { {3,'-'} {4,'a'} {4,'b'} {4,'c'} {5,'-'} }
After: { {3,'-'} {4,'A'} {4,'B'} {4,'C'} {5,'-'} }


ranges::view_interface helper class template for defining a view, using the
(C++20) curiously recurring template pattern
(class template)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.