函数模板
<iterator>

std::prev

template <class BidirectionalIterator>  BidirectionalIterator prev (BidirectionalIterator it,       typename iterator_traits<BidirectionalIterator>::difference_type n = 1);
获取前一个元素的迭代器
返回一个迭代器,该迭代器指向将 it 推进 -n 个位置后所指向的元素。

如果 it 是一个随机访问迭代器,则函数只使用一次 operator+operator-。否则,函数将重复使用复制的迭代器的递增或递减运算符(operator++operator--),直到推进 n 个元素为止。

参数

it
迭代器的基准位置。
BidirectionalIterator 应至少是双向迭代器
n
元素位置的偏移量(默认为 1)。
difference_type 是表示 BidirectionalIterator 类型迭代器之间距离的数值类型。

返回值

指向 itn 个位置的元素的迭代器。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// prev example
#include <iostream>     // std::cout
#include <iterator>     // std::next
#include <list>         // std::list
#include <algorithm>    // std::for_each

int main () {
  std::list<int> mylist;
  for (int i=0; i<10; i++) mylist.push_back (i*10);

  std::cout << "The last element is " << *std::prev(mylist.end()) << '\n';

  return 0;
}

输出

The last element is 90


复杂度

随机访问迭代器 的常量。
对于双向迭代器,线性复杂度与 n 相关。

迭代器有效性

无效果。

数据竞争

该函数会访问迭代器,但它永远不会被解引用(调用不会访问指向的对象)。

异常安全

如果对复制的迭代器执行的任何算术运算抛出异常,则会抛出异常,并提供与这些运算相同的保证级别。

另见