Heim > Backend-Entwicklung > C++ > Warum erhalte ich falsche Abstände, wenn ich Iteratoren verwende, um Abstände zwischen Punkten zu berechnen?

Warum erhalte ich falsche Abstände, wenn ich Iteratoren verwende, um Abstände zwischen Punkten zu berechnen?

DDD
Freigeben: 2024-11-01 00:11:28
Original
653 Leute haben es durchsucht

Why am I getting incorrect distances when using iterators to calculate distances between points?

Iteratoren korrekt für Entfernungsberechnungen verwenden

Sie stoßen auf einen Fehler in Ihrem Code, wenn Sie versuchen, Entfernungen zwischen in einem Vektor gespeicherten Punkten zu berechnen. Es scheint, dass das Problem in der Art und Weise liegt, wie Sie den Iterator verwenden.

Ihr Code verwendet std::vector-Iteratoren, die Zeiger auf Elemente innerhalb des Vektors sind. Sie übergeben diese Iteratoren jedoch direkt an die Distanzfunktion, die Zeiger auf die Punktobjekte selbst erwartet. Diese Nichtübereinstimmung führt zu falschen Ergebnissen.

Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:

Option 1: Dereferenzieren Sie die Iteratoren

Sie können die dereferenzieren Iteratoren, um Referenzen auf die entsprechenden Punktobjekte zu erhalten. Dies kann mit dem *-Operator erfolgen. Hier ist der geänderte Code:

<code class="C++">for (ii = po.begin(); ii != po.end(); ii++)
{
    for (jj = po.begin(); jj != po.end(); jj++)
    {
        cout << distance(*ii, *jj) << " ";
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Option 2: Referenzen in der Funktion verwenden

Alternativ können Sie Ihre Abstandsfunktion ändern, um Referenzen auf Punktobjekte direkt zu übernehmen:

<code class="C++">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

Auf diese Weise können Sie die Distanzfunktion mit Iteratoren direkt aufrufen:

<code class="C++">for (ii = po.begin(); ii != po.end(); ii++)
{
    for (jj = po.begin(); jj != po.end(); jj++)
    {
        cout << distance(*ii, *jj) << " ";
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Mit einer dieser Methoden sollten Sie die korrekten Distanzberechnungen zwischen Punktpaaren erhalten Ihr Vektor.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich falsche Abstände, wenn ich Iteratoren verwende, um Abstände zwischen Punkten zu berechnen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage