问题陈述:
计算向量中存储的点之间的距离时,获得不正确的结果,可能是由于迭代器使用不当造成的。
代码片段:
<code class="cpp">typedef struct point { float x; float y; } point; float distance(point *p1, point *p2) { return sqrt((p1->x - p2->x)*(p1->x - p2->x) + (p1->y - p2->y)*(p1->y - p2->y)); } int main() { vector<point> po; point p1; p1.x = 0; p1.y = 0; point p2; p2.x = 1; p2.y = 1; po.push_back(p1); po.push_back(p2); vector<point>::iterator ii; vector<point>::iterator jj; for (ii = po.begin(); ii != po.end(); ii++) { for (jj = po.begin(); jj != po.end(); jj++) { cout << distance(ii, jj) << " "; } } return 0; }</code>
不正确的输出:
0 1 -1 0
解决方案:
问题是由于无意中调用了对迭代器进行操作的 std::distance() 函数而引起的。要解决此问题,请在标准库类型前添加 std:: 前缀,并将 distance() 函数更改为采用引用。
<code class="cpp">float distance(const point& p1, const point& p2) { return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y)); }</code>
然后,使用取消引用的迭代器调用该函数:
<code class="cpp">distance(*ii, *jj);</code>
其他优化:
直接在 C 中使用结构体点来代替 typedef,因为不再需要在 typedef 中将其定义为结构体。
以上是为什么在计算 C 向量中的点之间的距离时得到的距离不正确?的详细内容。更多信息请关注PHP中文网其他相关文章!