C++11 函数返回额外的0
我有一个计算两点之间距离的函数,一切正常,但最后我得到了一个额外的零 我的意见:C++11 函数返回额外的0,c++11,stdvector,C++11,Stdvector,我有一个计算两点之间距离的函数,一切正常,但最后我得到了一个额外的零 我的意见: 2 3, 12 30, 40 50, 5 1, 12 10, 3 4 0表示“无距离”,因此同一位置上必须有两个点。 当我查看您的输入时,似乎3有两次。 这是最短的距离,在那之后,再也找不到比这更短的了。是正确的,这是因为我使用的浮点数据类型不应该使用它们。是时候在调试器中逐条检查代码了。并验证输入以确保其有效且不包含任何不应包含的值。为什么要使用float作为循环索引?这几乎肯定是错的。是的,这太愚蠢了,
2 3, 12 30, 40 50, 5 1, 12 10, 3 4
0表示“无距离”,因此同一位置上必须有两个点。
当我查看您的输入时,似乎3有两次。
这是最短的距离,在那之后,再也找不到比这更短的了。是正确的,这是因为我使用的浮点数据类型不应该使用它们。是时候在调试器中逐条检查代码了。并验证输入以确保其有效且不包含任何不应包含的值。为什么要使用
float
作为循环索引?这几乎肯定是错的。是的,这太愚蠢了,我改变了它这些是坐标对,3是(2,3)和(3,4)的一部分,它们绝对不应该是同一点。在cout线上放一个断点,当min变为0时,看看I和j是什么。这应该给你一个线索。可能错误在dist函数中。返回0的肯定是“dist”。你必须找出时间和原因。
float bruteForce(vector< pair <float,float> >::const_iterator brute, vector< pair <float,float> >::const_iterator end, float m)
{
float min = FLT_MAX;
for (int i = 0; i < m; i++)
{
for (int j = i+1; j < m; j++)
{
if ( dist(brute[i].first, brute[i].second, brute[j].first, brute[j].second ) < min)
{
min = dist(brute[i].first, brute[i].second, brute[j].first, brute[j].second);
cout << min << endl;
}
}
}
return min;
}
1.41421,
11.4018,
34.4093,
0