namespace std {
template <class BidirectionalIterator>
BidirectionalIterator prev(BidirectionalIterator x,
typename std::iterator_traits<BidirectionalIterator>::difference_type n = 1); // C++11
template <class BidirectionalIterator>
constexpr BidirectionalIterator prev(BidirectionalIterator x,
typename std::iterator_traits<BidirectionalIterator>::difference_type n = 1); // C++17
}
概要
n
回後方に進めたイテレータを返す。
advance()
と違い、引数として渡されたイテレータへの参照を書き換えるのではなく、n
回後方に進んだイテレータのコピーを返す。
効果
advance(x, -n);
return x;
戻り値
引数として渡されたイテレータをn
回後方に進めたイテレータのコピー
例
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v = {3, 1, 4, 5, 2};
{
decltype(v)::iterator it = std::prev(v.end()); // イテレータを1回逆に進める
std::cout << *it << std::endl;
}
{
decltype(v)::iterator it = std::prev(v.end(), 2); // イテレータを2回逆に進める
std::cout << *it << std::endl;
}
}
xxxxxxxxxx
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v = {3, 1, 4, 5, 2};
{
decltype(v)::iterator it = std::prev(v.end()); // イテレータを1回逆に進める
std::cout << *it << std::endl;
}
{
decltype(v)::iterator it = std::prev(v.end(), 2); // イテレータを2回逆に進める
std::cout << *it << std::endl;
}
}
出力
2
5
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.4 ✅
- ICC: ??
- Visual C++: ??
関連項目
名前 | 説明 |
---|---|
next() |
n 回前方に進めたイテレータを返す |
advance() |
n 回イテレータを進める |