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