1.std::advance
distance的函数声明如下: template< class InputIt >
constexpr typename std::iterator_traits<InputIt>::difference_type
distance( InputIt first, InputIt last );
Returns the number of elements between first and last.
distance是计算两个iterator间隔的距离,例子:#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v{ 3, 1, 4 };
std::cout << "distance(first, last) = "
<< std::distance(v.begin(), v.end()) << '\n'
<< "distance(last, first) = "
<< std::distance(v.end(), v.begin()) << '\n';
}
Output:
distance(first, last) = 3
distance(last, first) = -3
2.std::advance
template <class InputIterator, class Distance>
void advance (InputIterator& it, Distance n);
advance迭代器辅助函数。使迭代器it偏移n,其中n为整数,n为正数向右偏移,n为负数向左偏移。
advance是改变iterator的指向,例子如下:
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v{ 3, 1, 4 };
auto vi = v.begin();
std::advance(vi, 2);
std::cout << *vi << '\n';
}
Output:
4
3.std::next
C++ Iterator library Defined in header <iterator>声明如下:
template< class ForwardIt >
ForwardIt next(ForwardIt it, typename std::iterator_traits<ForwardIt>::difference_type n = 1 );
参数
it - 一个迭代器
n - 相对于前面迭代器的元素个数
返回值:返回相对it后第n个迭代器
函数的定义:
template<class ForwardIt>
ForwardIt next(ForwardIt it, typename std::iterator_traits<ForwardIt>::difference_type n = 1)
{
std::advance(it, n);
return it;
}
例子:
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v{ 3, 1, 4 };
auto it = v.begin();
auto nx = std::next(it, 2);
std::cout << *it << ' ' << *nx << '\n';
}
Output:
3 4
注意:当next中的n不给予赋值时,n默认值为1。