std:: prev
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<iterator>
|
||
|
template
<
class
BidirIt
>
BidirIt prev ( BidirIt it, typename std:: iterator_traits < BidirIt > :: difference_type n = 1 ) ; |
(C++11 起)
(C++17 前) |
|
|
template
<
class
BidirIt
>
constexpr
|
(C++17 起) | |
返回迭代器 it 的第 n 个前驱(若 n 为负值则返回第 - n 个后继)。
目录 |
参数
| it | - | 迭代器 |
| n | - | 迭代器应下移的元素数量 it |
| 类型要求 | ||
-
BidirIt
必须满足
LegacyBidirectionalIterator
的要求。
|
||
返回值
一个类型为
BidirIt
的迭代器,它持有迭代器
it
的第
n
个前驱(若
n
为负值则为第
-
n
个后继)。
复杂度
线性。
然而,若
BidirIt
额外满足
LegacyRandomAccessIterator
的要求,则复杂度为常数级别。
可能的实现
template<class BidirIt> constexpr // 自 C++17 起 BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1) { std::advance(it, -n); return it; } |
注释
尽管表达式 -- c. end ( ) 通常能够编译通过,但这并非绝对保证: c. end ( ) 是一个右值表达式,而迭代器规范并未要求对右值进行递减操作必须有效。特别是当迭代器以指针形式实现或其 operator -- 被左值引用限定时, -- c. end ( ) 将无法编译,而 std :: prev ( c. end ( ) ) 则可以正常编译。
示例
#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'; }
输出:
1 4
参见
|
(C++11)
|
递增迭代器
(函数模板) |
|
按给定距离推进迭代器
(函数模板) |
|
|
返回两个迭代器间的距离
(函数模板) |
|
|
(C++20)
|
按给定距离或边界递减迭代器
(算法函数对象) |