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