Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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)

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>

home | help