C++ 参考手册
- C++11
 - C++14
 - C++17
 - C++20
 - C++ 编译器支持情况表
 - 独立与宿主实现
 - C++ 语言
 - C++ 关键词
 - 预处理器
 - C++ 标准库头文件
 - 具名要求
 - 功能特性测试 (C++20)
 - 工具库
 - 类型支持(基本类型、RTTI、类型特性)
 - 概念库 (C++20)
 - 错误处理
 - 动态内存管理
 - 日期和时间工具
 - 字符串库
 - 容器库
 - 迭代器库
 - std::begin, std::cbegin
 - std::end, std::cend
 - std::next
 - std::reverse_iterator
 - std::rbegin, std::crbegin
 - std::indirectly_readable
 - std::indirectly_writable
 - std::weakly_incrementable
 - std::prev
 - std::move_iterator
 - std::size, std::ssize
 - std::empty
 - std::data
 - std::insert_iterator
 - std::rend, std::crend
 - std::incrementable
 - std::input_or_output_iterator
 - std::sentinel_for
 - std::sized_sentinel_for, std::disable_sized_sentinel_for
 - std::input_iterator
 - std::output_iterator
 - std::forward_iterator
 - std::bidirectional_iterator
 - std::random_access_iterator
 - std::contiguous_iterator
 - std::iterator_traits
 - std::input_iterator_tag, std::output_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag, std::random_access_iterator_tag, std::contiguous_iterator_tag
 - std::iterator
 - std::incrementable_traits
 - std::indirectly_readable_traits
 - std::iter_value_t, std::iter_reference_t, std::iter_difference_t, std::iter_rvalue_reference_t, std::iter_common_reference_t
 - std::indirect_unary_invocable, std::indirectly_regular_unary_invocable
 - std::indirect_unary_predicate
 - std::indirect_binary_predicate
 - std::indirect_equivalence_relation
 - std::indirect_strict_weak_order
 - std::indirectly_movable
 - std::indirectly_movable_storable
 - std::indirectly_copyable
 - std::indirectly_copyable_storable
 - std::indirectly_swappable
 - std::indirectly_comparable
 - std::permutable
 - std::mergeable
 - std::sortable
 - std::indirect_result_t
 - std::projected
 - std::move_sentinel
 - std::back_insert_iterator
 - std::front_insert_iterator
 - std::make_reverse_iterator
 - std::make_move_iterator
 - std::default_sentinel_t, std::default_sentinel
 - std::unreachable_sentinel_t, std::unreachable_sentinel
 - std::back_inserter
 - std::front_inserter
 - std::inserter
 - std::istream_iterator
 - std::ostream_iterator
 - std::istreambuf_iterator
 - std::ostreambuf_iterator
 - std::advance
 - std::distance
 - 注释
 - 范围库 (C++20)
 - 算法库
 - 数值库
 - 输入/输出库
 - 文件系统库
 - 本地化库
 - 正则表达式库
 - 原子操作库
 - 线程支持库
 - 实验性 C++ 特性
 - 有用的资源
 - 索引
 - std 符号索引
 - 协程支持 (C++20)
 - C++ 关键词
 
std::prev
|   定义于头文件  <iterator>
  | 
||
|   template< class BidirIt > BidirIt prev(  | 
 (C++11 起)  (C++17 前)  | 
|
|   template< class BidirIt > constexpr BidirIt prev(  | 
(C++17 起) | |
返回迭代器 it 的第 n 个前驱。
参数
| it | - | 迭代器 | 
| n | - | it 要被减少的元素数 | 
| 类型要求 | ||
 -BidirIt 必须满足遗留双向迭代器 (LegacyBidirectionalIterator)  的要求。
 | ||
返回值
迭代器 it 的第 n 个前驱。
复杂度
线性。
然而,若 BidirIt 还满足 遗留随机访问迭代器 (LegacyRandomAccessIterator)  的要求,则复杂度为常数。
可能的实现
template<class BidirIt> BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1) { std::advance(it, -n); return it; }  | 
注意
尽管表达式 --c.end() 通常能编译,然而不保证会这么做: c.end() 是右值表达式,而且无迭代器要求指定右值的自减保证进行。尤其是当迭代器以指针实现时, --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'; }
输出:
1
参阅
|    (C++11)  | 
  令迭代器自增  (函数模板)  | 
|   令迭代器前进给定的距离  (函数模板)  |