在求解“最邻近点对”问题的时候需要求两点间距离,于是自己实现了一个函数:
int distance(const Point &p1,const Point &p2);
但是调用总是会出错,后来发现原因在于系统头文件xutility.h
中有这么一个函数
template<class _InIt> inline
typename iterator_traits<_InIt>::difference_type
distance(_InIt _First, _InIt _Last)
{ // return distance between iterators
typename iterator_traits<_InIt>::difference_type _Off = 0;
_Distance2(_First, _Last, _Off, _Iter_cat(_First));
return (_Off);
}
这是一个内联函数,会把程序中的自定义的distance替换成这个函数,该函数作用在于求容器里相邻元素的差(类似于等差数列中的公差),下面给段例子
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);
例如:
// distance example
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
int main () {
list<int> mylist;
for (int i=0; i<10; i++) mylist.push_back (i*10);
list<int>::iterator first = mylist.begin();
list<int>::iterator last = mylist.end();
cout << "The distance is: " << distance(first,last) << endl;
return 0;
}
结果:10
因此最简单的解决方案是换一个函数名,比如换成
int dist(const Point &p1,const Point &p2);