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

FreeBSD Manual Pages

  
 
  

home | help
std::prev(3)		      C++ Standard Libary		  std::prev(3)

NAME
       std::prev - std::prev

Synopsis
	  Defined in header <iterator>
	  template< class BidirIt >

	  BidirIt							 prev(
       (since C++11)
	  BidirIt							   it,
       (until C++17)

	  typename std::iterator_traits<BidirIt>::difference_type n = 1	);
	  template< class BidirIt >

	  constexpr			   BidirIt			 prev(
       (since C++17)
	  BidirIt it,

	  typename std::iterator_traits<BidirIt>::difference_type n = 1	);

	  Return the nth predecessor of	iterator it.

Parameters
	  it	    -	     an	iterator
	  n	    -	     number of elements	it should be descended

Type requirements
	  -
	  BidirIt must meet the	requirements of	LegacyBidirectionalIterator.

Return value
	  The nth predecessor of iterator it.

Complexity
	  Linear.

	  However, if BidirIt additionally meets the requirements of
	  LegacyRandomAccessIterator, complexity is constant.

Possible implementation
	  template<class BidirIt>
	  constexpr // since C++17
	  BidirIt      prev(BidirIt	  it,	    typename	   std::itera-
       tor_traits<BidirIt>::difference_type n =	1)
	  {
	      std::advance(it, -n);
	      return it;
	  }

Notes
	  Although  the	expression --c.end() often compiles, it	is not guaran-
       teed to do so:
	  c.end() is an	rvalue expression, and there is	no  iterator  require-
       ment that specifies
	  that	decrement  of  an rvalue is guaranteed to work.	In particular,
       when iterators are
	  implemented as pointers or its operator--  is	 lvalue-ref-qualified,
       --c.end() does
	  not compile, while std::prev(c.end())	does.

Example
       // Run this code

	#include <iostream>
	#include <iterator>
	#include <vector>

	int main()
	{
	    std::vector<int> v{	3, 1, 4	};

	    auto it = v.end();
	    auto pv = std::prev(it, 2);
	    std::cout << *pv <<	'\n';

	    it = v.begin();
	    pv = std::prev(it, -2);
	    std::cout << *pv <<	'\n';
	}

Output:
	1
	4

See also
	  next	       increment an iterator
	  (C++11)      (function template)
	  advance      advances	an iterator by given distance
		       (function template)
	  distance     returns the distance between two	iterators
		       (function template)
	  ranges::prev decrement an iterator by	a given	distance or to a bound
	  (C++20)      (niebloid)

http://cppreference.com		  2022.07.31			  std::prev(3)

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

home | help