Using Iterators Correctly for Distance Calculations
You are encountering an error in your code when trying to calculate distances between points stored in a vector. It appears that the issue lies in the way you are using the iterator.
Your code uses std::vector iterators, which are pointers to elements within the vector. However, you are passing these iterators directly to the distance function, which expects pointers to the point objects themselves. This mismatch is causing incorrect results.
To resolve this, you have two options:
Option 1: Dereference the Iterators
You can dereference the iterators to obtain references to the corresponding point objects. This can be done using the * operator. Here's the modified code:
<code class="C++">for (ii = po.begin(); ii != po.end(); ii++) { for (jj = po.begin(); jj != po.end(); jj++) { cout << distance(*ii, *jj) << " "; } }</code>
Option 2: Use References in the Function
Alternatively, you can modify your distance function to take references to point objects directly:
<code class="C++">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>
This way, you can call the distance function with iterators directly:
<code class="C++">for (ii = po.begin(); ii != po.end(); ii++) { for (jj = po.begin(); jj != po.end(); jj++) { cout << distance(*ii, *jj) << " "; } }</code>
By using one of these methods, you should obtain the correct distance calculations between pairs of points in your vector.
The above is the detailed content of Why am I getting incorrect distances when using iterators to calculate distances between points?. For more information, please follow other related articles on the PHP Chinese website!