首页  >  文章  >  后端开发  >  为什么我使用 C 迭代器进行的距离计算会产生意外的结果?

为什么我使用 C 迭代器进行的距离计算会产生意外的结果?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-05 00:52:02369浏览

Why Do My Distance Calculations Using C   Iterators Produce Unexpected Results?

有效使用迭代器:解决距离计算错误

在 C 中,向量提供了一种便捷的数据存储方式。为了迭代它们,使用迭代器。但是,迭代器使用不当可能会导致不正确的结果。

问题

考虑一个场景,您的目标是计算存储在向量中的点之间的距离。但是,您获得的结果与预期值不同。这可能表明向量中如何使用迭代器存在问题。

解决问题

当您使用迭代器访问向量中的元素时,您将获得对元素本身的引用。要将指向元素的指针传递给函数,您需要取消引用迭代器并获取其地址: &*ii.

但是,更好的做法是重新设计距离函数以接受引用而不是指针:

<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>

通过此修改,您可以在循环中将距离函数调用为 distance(ii,jj)。

附加说明

  1. 使用“typedef struct”是一种过时的 C 风格语法。在 C 中,请使用“struct”。
  2. 将向量直接传递给距离函数比取消引用迭代器更有效:

    <code class="cpp">float distance(const vector<point>& vec, size_t i, size_t j)
    {
     // Your previous distance calculation code
    }</code>

以上是为什么我使用 C 迭代器进行的距离计算会产生意外的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn