std::distance()的用法总结

阅读代码的时候遇到了这个函数,大致知道意思是返回两个元素之间的距离,网上找了一些资料在这里做一个总结,方便自己记忆。

C++中的详细定义

  • distance( )函数
    详细的定义可以参考如下代码:
1
2
3
4
5
function template
<iterator>
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);

作用是:返回两个迭代器之间的距离,也可以理解为计算两个元素 first 和 last 之间的元素数。

注意:如果说 InputIterator 不是一个正向迭代器,那么元素 first 以及如何从它的值获得的引用、迭代器以及指针都可能是无效的。

  • 下面通过一个具体的实例让大家可以更好的了解 distance( )函数的作用。

定义两个set分别为 sub 和 sup,计算两者相同元素分别与sup首元素之间的距离,返回结果 {1,3,4}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   /*
   *   compute_distance( {1, 3, 6}, {0, 1, 2, 3, 6, 7} ) = {1, 3, 4}
   */
  std::vector<uint8_t> compute_distance( std::set<int> const& sub, std::set<int> const& sup ) const
  {
    std::vector<uint8_t> support;
    support.reserve( sub.size() );

    auto itp = sup.begin();
    for ( auto i : sub )
    {
      itp = std::find( itp, sup.end(), i );
      support.push_back( static_cast<uint8_t>( std::distance( sup.begin(), itp ) ) );
    }

    return support;
  }