Menggunakan Iterator dalam Vektor C: Perangkap Biasa Diselesaikan
Iterators adalah penting untuk melintasi dan memanipulasi elemen dalam vektor C. Walau bagaimanapun, jika digunakan secara tidak betul, ia boleh membawa kepada hasil yang tidak dijangka. Dalam artikel ini, kami akan meneroka isu biasa dengan iterator dalam operasi vektor dan menyediakan penyelesaian untuk membetulkannya.
Dalam coretan kod yang disediakan, percubaan dibuat untuk mengira jarak antara titik yang disimpan dalam vektor. Keputusan yang dijangka dan sebenar berbeza kerana iterator tidak digunakan dengan betul. Kod menggunakan fungsi std::distance() tanpa penyahrujukan penuding yang diperlukan, mengakibatkan pengiraan jarak yang salah.
Membetulkan Isu
Untuk menyelesaikan isu ini, terdapat ialah dua pendekatan:
Pelajar Dereference untuk Mendapatkan Penunjuk:
Ubah suai Fungsi untuk Menerima Rujukan:
<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>
Dengan pengubahsuaian ini, teruskan penyahrujukan bagi iterator tidak lagi diperlukan dan pengiraan jarak boleh dilakukan menggunakan jarak(*ii, *jj) atau jarak(*ii, j) (kerana j juga merupakan lelaran).
Secara umumnya disyorkan untuk menggunakan pendekatan kedua, yang lebih jelas dan mengelakkan potensi isu berkaitan penunjuk. Selain itu, typedef untuk titik boleh dipermudahkan untuk menggunakan struct tanpa typedef yang tidak diperlukan.
Nota Tambahan
Berikut ialah beberapa petua tambahan untuk menggunakan iterator dengan berkesan:
Dengan memahami konsep ini dan mengikut garis panduan ini, anda boleh mengelakkan perangkap biasa apabila bekerja dengan iterator dalam vektor C dan memastikan pelaksanaan kod yang tepat dan cekap.
Atas ialah kandungan terperinci Mengapa Pengiraan Jarak Saya Dimatikan Apabila Menggunakan Iterator dalam Vektor C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!