Heim > Backend-Entwicklung > C++ > 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
Freigeben: 2024-11-01 21:06:02
Original
752 Leute haben es durchsucht

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>
Nach dem Login kopieren

Falsche Ausgabe:

0
1
-1
0
Nach dem Login kopieren

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>
Nach dem Login kopieren

Dann rufen Sie die Funktion mit dereferenzierten Iteratoren auf:

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

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage