問題陳述:
計算向量中儲存的點之間的距離時,獲得不正確的結果,可能是由於迭代器使用不當造成的。
程式碼片段:
<code class="cpp">typedef struct point { float x; float y; } point; float distance(point *p1, point *p2) { return sqrt((p1->x - p2->x)*(p1->x - p2->x) + (p1->y - p2->y)*(p1->y - p2->y)); } int main() { vector<point> po; point p1; p1.x = 0; p1.y = 0; point p2; p2.x = 1; p2.y = 1; po.push_back(p1); po.push_back(p2); vector<point>::iterator ii; vector<point>::iterator jj; for (ii = po.begin(); ii != po.end(); ii++) { for (jj = po.begin(); jj != po.end(); jj++) { cout << distance(ii, jj) << " "; } } return 0; }</code>
不正確的輸出:
0 1 -1 0
解決方案:
問題是由於無意中呼叫了對迭代器進行操作的std::distance() 函數而引起的。若要解決此問題,請在標準庫類型前面加上 std:: 前綴,並將 distance() 函數變更為採用參考。
<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>
然後,使用取消引用的迭代器呼叫函數:
<code class="cpp">distance(*ii, *jj);</code>
其他最佳化:
直接在C 中使用結構體點來取代typedef,因為不再需要在typedef 中定義為結構體。
以上是為什麼在計算 C 向量中的點之間的距離時得到的距離不正確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!