”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么在 C++ 向量中使用迭代器时我的距离计算会关闭?

为什么在 C++ 向量中使用迭代器时我的距离计算会关闭?

发布于2024-12-21
浏览:597

Why Are My Distance Calculations Off When Using Iterators in C   Vectors?

在 C 向量中使用迭代器:已解决的常见陷阱

迭代器对于遍历和操作 C 向量中的元素至关重要。然而,如果使用不当,它们可能会导致意想不到的结果。在本文中,我们将探讨向量运算中迭代器的常见问题,并提供解决方案来解决该问题。

在提供的代码片段中,尝试计算存储在向量中的点之间的距离。由于迭代器的使用不正确,预期结果与实际结果有所不同。该代码使用 std::distance() 函数,而没有所需的指针取消引用,导致距离计算不正确。

修复问题

要解决此问题,有有两种方法:

  1. 取消引用迭代器来获取指针:

    • 代替 std::distance(ii, jj),使用 std::distance(*ii, *jj) 获取指向实际点的指针并正确执行距离计算.
  2. 修改函数以接受引用:

    • 或者,重写距离函数以接受引用而不是指针,如下所示:
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));
}

通过此修改,不再需要直接取消引用迭代器,并且可以使用 distance(*ii, *jj) 或 distance(*ii, j) 执行距离计算(因为 j 也是迭代器) ).

一般建议使用第二种方式,这种方式更加清晰,并且避免了潜在的指针相关问题。此外,point 的 typedef 可以简化为使用 struct,而无需不必要的 typedef。

附加说明

以下是有效使用迭代器的一些附加提示:

  • 确保迭代器在使用前正确初始化。
  • 使用 std::next() 或std::prev() 向前或向后移动迭代器。
  • 避免比较来自不同容器的迭代器。
  • 对于函数参数,优先选择引用而不是指针。

By了解这些概念并遵循这些准则,您可以避免在 C 向量中使用迭代器时的常见陷阱,并确保准确高效的代码执行。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3