Rumah >pembangunan bahagian belakang >C++ >Adakah Sah untuk Membandingkan Iterator daripada Bekas Berbeza dalam C ?

Adakah Sah untuk Membandingkan Iterator daripada Bekas Berbeza dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-02 09:02:291013semak imbas

Is It Valid to Compare Iterators from Different Containers in C  ?

Membandingkan Iterator daripada Bekas Berbeza

Apabila bekerja dengan bekas, adalah penting untuk memahami implikasi membandingkan iterator daripada bekas yang berbeza. Timbul persoalan: adakah dibenarkan untuk membandingkan iterator yang dimiliki oleh bekas yang berbeza?

Pertimbangkan kod berikut:

<code class="cpp">std::vector<int> foo;
std::vector<int> bar;
std::cout << (foo.begin() == bar.begin());</code>

Adakah ungkapan foo.begin() == bar.begin() menghasilkan palsu atau membawa kepada tingkah laku yang tidak ditentukan?

Menyelidiki piawaian C 11 (n3337) boleh menjelaskan dilema ini:

Iterators dalam Jujukan Yang Sama

  • Seksyen 24.2.1 menyatakan bahawa dua iterator, i dan j, dianggap boleh dicapai jika wujud urutan terhingga bagi operasi i yang menjadikan i sama dengan j.
  • Jika j boleh dicapai daripada i , mereka merujuk elemen daripada jujukan yang sama.

Membandingkan Iterator daripada Bekas Berbeza

  • ForwardIterators, yang termasuk RandomAccessIterators, tertakluk kepada Seksyen 24.2. 5.
  • Bahagian ini menyatakan bahawa == hanya boleh digunakan untuk membandingkan iterator ke atas jujukan asas yang sama.

Memandangkan keperluan ini, membandingkan iterator daripada bekas yang berbeza adalah tingkah laku yang tidak ditentukan.

Kesimpulannya, membandingkan iterator daripada bekas yang berbeza ialah gelagat yang tidak ditentukan dan adalah penting untuk mematuhi kekangan ini semasa menulis iterator tersuai dan memanipulasi bekas dalam kod anda.

Atas ialah kandungan terperinci Adakah Sah untuk Membandingkan Iterator daripada Bekas Berbeza dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn