C++ 最近点实现
我正在尝试实施一个最近点程序。代码如下:C++ 最近点实现,c++,C++,我正在尝试实施一个最近点程序。代码如下: #include <iostream> #include <cstdlib> #include <math.h> using namespace std; float randfloat(){ return 1.0*rand()/RAND_MAX; } class point { public : float x,y; float distance(point& a){
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
float randfloat(){
return 1.0*rand()/RAND_MAX;
}
class point
{
public :
float x,y;
float distance(point& a){
float dx=x-a.x;
float dy=y-a.y;
return sqrt(dx*dx+dy*dy);
}
};
int main(int argc,char* argv[]){
int i,cnt=0;
int n=atoi(argv[1]);
float d=atof(argv[2]);
point *a=new point[n];
for (int i=0;i<n;i++)
{
a[i].x=randfloat();
a[i].y=randfloat();
}
for (i=0;i<n;i++)
for (int j=i+1;j<n;j++)
if ((distance(a[i],a[j])<d)) cnt++;
cout << cnt << "pairs within" << d << endl;
return 0;
}
#包括
#包括
#包括
使用名称空间std;
float和float(){
返回1.0*rand()/rand_MAX;
}
类点
{
公众:
浮动x,y;
浮动距离(点和a){
浮动dx=x-a.x;
浮动dy=y-a.y;
返回sqrt(dx*dx+dy*dy);
}
};
int main(int argc,char*argv[]){
int i,cnt=0;
int n=atoi(argv[1]);
float d=atof(argv[2]);
点*a=新点[n];
对于(int i=0;i我相信您使用了错误的distance()
函数。我相信您的意思是
a[i]。距离(a[j])
而不是
距离(a[i],a[j])
您应该调用表单中的成员函数
a[i].distance(a[j])
您看到的问题是,有一个内置函数名为,它需要两个迭代器。由于point
不是迭代器,编译器会抛出这些听起来完全不相关的错误
(顺便说一句,由于.distance()
不修改参数,最好将其声明为浮点距离(const-point&a)const
)因为您将距离
声明为点
的成员函数,所以应该调用它
if ((a[i].distance(a[j])<d)) cnt++;
if((a[i].distance(a[j])对不起,你知道壁橱是什么,对吧?有趣的是,你甚至在cpp文件中有输入错误:)你可能想更正这个。除此之外,我认为应该是[i].distance(a[j])而不是distance(a[i],a[j])
if ((a[i].distance(a[j])<d)) cnt++;