有效使用迭代器:解決距離計算錯誤
在 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中文網其他相關文章!