Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich falsche Abstände, wenn ich Abstände zwischen Punkten in einem C-Vektor berechne?

Warum erhalte ich falsche Abstände, wenn ich Abstände zwischen Punkten in einem C-Vektor berechne?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 21:06:02628Durchsuche

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

Korrekte Verwendung von Iteratoren im C-Vektor

Problemstellung:

Bei der Berechnung von Abständen zwischen in einem Vektor gespeicherten Punkten Es wird ein falsches Ergebnis erhalten, möglicherweise aufgrund einer unsachgemäßen Verwendung von Iteratoren.

Code-Snippet:

<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>

Falsche Ausgabe:

0
1
-1
0

Lösung:

Das Problem entsteht durch den unwissentlichen Aufruf der Funktion std::distance(), die auf Iteratoren arbeitet. Um dieses Problem zu beheben, stellen Sie Standardbibliothekstypen das Präfix std:: voran und ändern Sie die Funktion distance() so, dass stattdessen Referenzen angenommen werden.

<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>

Dann rufen Sie die Funktion mit dereferenzierten Iteratoren auf:

<code class="cpp">distance(*ii, *jj);</code>

Zusätzliche Optimierung:

Anstelle einer Typedef verwenden Sie den Strukturpunkt direkt in C, da es nicht mehr notwendig ist, ihn als Struktur in der Typedef zu definieren.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich falsche Abstände, wenn ich Abstände zwischen Punkten in einem C-Vektor berechne?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn