std::distance()的用法总结

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

C++中的详细定义

  • distance( )函数
    详细的定义可以参考如下代码:
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}

   /*
   *   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;
  }
  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值