Iteratoren effektiv nutzen: Entfernungsberechnungsfehler beheben
In C bieten Vektoren eine praktische Möglichkeit, Daten zu speichern. Um sie zu durchlaufen, werden Iteratoren verwendet. Eine unsachgemäße Verwendung von Iteratoren kann jedoch zu falschen Ergebnissen führen.
Das Problem
Stellen Sie sich ein Szenario vor, in dem Sie den Abstand zwischen in einem Vektor gespeicherten Punkten berechnen möchten. Die erhaltenen Ergebnisse weichen jedoch von den erwarteten Werten ab. Dies könnte auf ein Problem mit der Verwendung von Iteratoren innerhalb des Vektors hinweisen.
Lösung des Problems
Wenn Sie mit einem Iterator auf ein Element in einem Vektor zugreifen, erhalten Sie eine Verweis auf das Element selbst. Um einen Zeiger auf das Element an eine Funktion zu übergeben, müssen Sie den Iterator dereferenzieren und seine Adresse übernehmen: &*ii.
Eine bessere Vorgehensweise besteht jedoch darin, die Distanzfunktion so umzugestalten, dass sie Referenzen anstelle von Zeigern akzeptiert:
<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>
Mit dieser Modifikation können Sie die Distanzfunktion als distance(ii,jj) innerhalb der Schleife aufrufen.
Zusätzliche Hinweise
Die direkte Übergabe von Vektoren an die Distanzfunktion wäre effizienter als die Dereferenzierung von Iteratoren:
<code class="cpp">float distance(const vector<point>& vec, size_t i, size_t j) { // Your previous distance calculation code }</code>
Das obige ist der detaillierte Inhalt vonWarum führen meine Distanzberechnungen mit C-Iteratoren zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!