Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::prev

      From cppreference.com
      <cpp‎ |iterator
       
       
      Iterator library
      Iterator concepts
      Iterator primitives
      Algorithm concepts and utilities
      Indirect callable concepts
      Common algorithm requirements
      (C++20)
      (C++20)
      (C++20)
      Utilities
      (C++20)
      Iterator adaptors
      Range access
      (C++11)(C++14)
      (C++14)(C++14)  
      (C++11)(C++14)
      (C++14)(C++14)  
      (C++17)(C++20)
      (C++17)
      (C++17)
       
      Defined in header<iterator>
      template<class BidirIt>
      BidirIt prev( BidirIt it,typenamestd::iterator_traits<BidirIt>::difference_type n=1);
      (since C++11)
      (until C++17)
      template<class BidirIt>

      constexpr

      BidirIt prev( BidirIt it,typenamestd::iterator_traits<BidirIt>::difference_type n=1);
      (since C++17)

      Return thenth predecessor (or-nth successor ifn is negative) of iteratorit.

      Contents

      [edit]Parameters

      it - an iterator
      n - number of elementsit should be descended
      Type requirements
      -
      BidirIt must meet the requirements ofLegacyBidirectionalIterator.

      [edit]Return value

      An iterator of typeBidirIt that holds thenth predecessor (or-nth successor ifn is negative) of iteratorit.

      [edit]Complexity

      Linear.

      However, ifBidirIt additionally meets the requirements ofLegacyRandomAccessIterator, complexity is constant.

      [edit]Possible implementation

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

      [edit]Notes

      Although the expression--c.end() often compiles, it is not guaranteed to do so:c.end() is an rvalue expression, and there is no iterator requirement that specifies that decrement of an rvalue is guaranteed to work. In particular, when iterators are implemented as pointers or itsoperator-- is lvalue-ref-qualified,--c.end() does not compile, whilestd::prev(c.end()) does.

      [edit]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:

      14

      [edit]See also

      (C++11)
      increment an iterator
      (function template)[edit]
      advances an iterator by given distance
      (function template)[edit]
      returns the distance between two iterators
      (function template)[edit]
      decrement an iterator by a given distance or to a bound
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/prev&oldid=159951"

      [8]ページ先頭

      ©2009-2025 Movatter.jp