有效使用迭代器:解决距离计算错误
在 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)。
附加说明
将向量直接传递给距离函数比取消引用迭代器更有效:
<code class="cpp">float distance(const vector<point>& vec, size_t i, size_t j) { // Your previous distance calculation code }</code>
以上是为什么我使用 C 迭代器进行的距离计算会产生意外的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!