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

FreeBSD Manual Pages

  
 
  

home | help
std::ranges...ge::advance(3)  C++ Standard Libary std::ranges...ge::advance(3)

NAME
       std::ranges::subrange::advance -	std::ranges::subrange::advance

Synopsis
	  constexpr  subrange& advance(	std::iter_difference_t<I> n );	(since
       C++20)

	  If n >= 0, increments	the stored iterator for	n times, or  until  it
       is equal	to the
	  stored  sentinel,  whichever	comes first. Otherwise,	decrements the
       stored iterator
	  for -n times.

	  The stored size, if any, is adjusted accordingly (increased by -n if
       n < 0,
	  decreased by m otherwise, where m is the number of increments	 actu-
       ally applied to
	  the iterator).

	  The behavior is undefined if

	    * I	does not model bidirectional_iterator and n < 0, or
	    *  the  stored iterator is decremented after becoming a non-decre-
       mentable	value.

Parameters
	  n - number of	maximal	increments of the iterator

Return value
	  *this

Complexity
	  Generally min(n, size()) increments or -n decrements on  the	itera-
       tor, when n >= 0	or
	  n < 0	respectively.

	  Constant if I	models random_access_iterator, and either n < 0	or
	  std::sized_sentinel_for<S, I>	is modeled.

Notes
	  The	stored	size  presents	if  and	 only  if  K  ==  ranges::sub-
       range_kind::sized but
	  std::sized_sentinel_for<S, I>	is not satisfied.

Example
       // Run this code

	#include <algorithm>
	#include <array>
	#include <iostream>
	#include <iterator>
	#include <ranges>

	void print(auto	name, auto const sub) {
	    std::cout << name << ".size() == " << sub.size() <<	"; { ";
	    std::ranges::for_each(sub, [](int x) { std::cout <<	x << ' '; });
	    std::cout << "}\n";
	};

	int main()
	{
	    std::array arr{1,2,3,4,5,6,7};
	    std::ranges::subrange	  sub{	       std::next(arr.begin()),
       std::prev(arr.end()) };
	    print("1) sub", sub);
	    print("2) sub", sub.advance(3));
	    print("3) sub", sub.advance(-2));
	}

Output:
	1) sub.size() == 5; { 2	3 4 5 6	}
	2) sub.size() == 2; { 5	6 }
	3) sub.size() == 4; { 3	4 5 6 }

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	      Applied	 to		    Behavior	as   published
       Correct behavior
	  LWG 3433 C++20      the specification	mishandled the cases when n  <
       corrected
			      0

See also
	  next		  obtains a copy of the	subrange with its iterator ad-
       vanced by a given
	  (C++20)	  distance
			  (public member function)
	  prev		   obtains  a  copy  of	the subrange with its iterator
       decremented by a
	  (C++20)	  given	distance
			  (public member function)
	  advance	  advances an iterator by given	distance
			  (function template)
	  ranges::advance advances an iterator by given	distance or to a given
       bound
	  (C++20)	  (niebloid)

http://cppreference.com		  2024.06.10	  std::ranges...ge::advance(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::subrange::advance&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help