一 简介
头文件<iterator>
1. std::advance
增加迭代器it n个元素的步长
template< class InputIt, class Distance >
void advance( InputIt& it, Distance n );(until C++17)
template< class InputIt, class Distance >
constexpr void advance( InputIt& it, Distance n ); (since C++17)
2. std::distance
返回迭代器 first 到 last 的 路程(可正可负)
template< class InputIt >
typename std::iterator_traits<InputIt>::difference_type
distance( InputIt first, InputIt last ); (until C++17)
template< class InputIt >
constexpr typename std::iterator_traits<InputIt>::difference_type
distance( InputIt first, InputIt last ); (since C++17)
3. std::next(C++11)
返回 it 后第n个迭代器
template< class ForwardIt >
ForwardIt next(
ForwardIt it,
typename std::iterator_traits<ForwardIt>::difference_type n = 1 ); (since C++11) (until C++17)
template< class InputIt >
constexpr InputIt next(
InputIt it,
typename std::iterator_traits<InputIt>::difference_type n = 1 ); (since C++17)
4. std::prev (C++11)
返回 it 前第n个迭代器
template< class BidirIt >
BidirIt prev(
BidirIt it,
typename std::iterator_traits<BidirIt>::difference_type n = 1 ); (since C++11) (until C++17)
template< class BidirIt >
constexpr BidirIt prev(
BidirIt it,
typename std::iterator_traits<BidirIt>::difference_type n = 1 ); (since C++17)
二 例子
#include <iostream>
#include <iterator> // next prev distance advance
#include <vector>
int main() {
{
// 几个辅助函数 (去掉所有cout输出代码;注意例子中的正负)
std::vector<int> vc {0,1,2,3,4,5,6,7,8,9};
auto it = vc.begin();
// std::next
it = std::next(it, 7);
it = std::next(it, -1);
// std::prev
it = std::prev(it, 1);
it = std::prev(it, -1);
// std::distance
std::distance(it, vc.end());
std::distance(it, vc.begin());
// std::advance
std::advance(it, 1);
std::advance(it, -1);
}
std::cin.get();
return 0;
}
加上cout输出后的结果:
三 参考