首頁 > 後端開發 > C++ > 主體

為什麼在計算 C 向量中的點之間的距離時得到的距離不正確?

Linda Hamilton
發布: 2024-11-01 21:06:02
原創
627 人瀏覽過

Why am I getting incorrect distances when calculating distances between points in a C   vector?

C 向量中迭代器的正確使用

問題陳述:

計算向量中儲存的點之間的距離時,獲得不正確的結果,可能是由於迭代器使用不當造成的。

程式碼片段:

<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!