Menggunakan Iterator dengan Betul untuk Pengiraan Jarak
Anda menghadapi ralat dalam kod anda semasa cuba mengira jarak antara titik yang disimpan dalam vektor. Nampaknya isu ini terletak pada cara anda menggunakan iterator.
Kod anda menggunakan std::vector iterator, yang merupakan penunjuk kepada elemen dalam vektor. Walau bagaimanapun, anda menghantar iterator ini terus ke fungsi jarak, yang menjangkakan penunjuk ke objek titik itu sendiri. Ketidakpadanan ini menyebabkan hasil yang tidak betul.
Untuk menyelesaikan masalah ini, anda mempunyai dua pilihan:
Pilihan 1: Nyahrujuk Pelaksana
Anda boleh membatalkan rujukan iterator untuk mendapatkan rujukan kepada objek titik yang sepadan. Ini boleh dilakukan menggunakan operator *. Berikut ialah kod yang diubah suai:
<code class="C++">for (ii = po.begin(); ii != po.end(); ii++) { for (jj = po.begin(); jj != po.end(); jj++) { cout << distance(*ii, *jj) << " "; } }</code>
Pilihan 2: Gunakan Rujukan dalam Fungsi
Sebagai alternatif, anda boleh mengubah suai fungsi jarak anda untuk mengambil rujukan ke objek secara langsung:
<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>
Dengan cara ini, anda boleh memanggil fungsi jarak dengan iterator secara terus:
<code class="C++">for (ii = po.begin(); ii != po.end(); ii++) { for (jj = po.begin(); jj != po.end(); jj++) { cout << distance(*ii, *jj) << " "; } }</code>
Dengan menggunakan salah satu kaedah ini, anda harus mendapatkan pengiraan jarak yang betul antara pasangan mata dalam vektor anda.
Atas ialah kandungan terperinci Mengapakah saya mendapat jarak yang salah apabila menggunakan iterator untuk mengira jarak antara titik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!