Rumah >pembangunan bahagian belakang >C++ >Bolehkah Iterator dari Bekas Berbeza Dibandingkan dalam C?

Bolehkah Iterator dari Bekas Berbeza Dibandingkan dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 14:35:29621semak imbas

Can Iterators from Different Containers be Compared in C  ?

Membandingkan Iterator daripada Bekas Berbeza

Dalam C , adalah penting untuk memahami prinsip yang mengawal perbandingan lelaran apabila berurusan dengan bekas yang berbeza. Timbul persoalan: "Adakah boleh diterima untuk membandingkan iterator daripada bekas yang berbeza?"

Untuk menjawabnya, kami merujuk kepada standard C 11 (n3337):

  • Umum Keperluan Iterator: Iterator j boleh dicapai daripada iterator i hanya jika menggunakan i terhingga berkali-kali menghasilkan i == j. Iterator yang boleh dicapai merujuk kepada unsur-unsur jujukan yang sama.
  • Iterators Hadapan dan Kesamaan: Domain pengendali kesamaan (==) untuk iterator ke hadapan adalah terhad kepada iterator yang berasal daripada turutan asas yang sama.

Memandangkan RandomAccessIterator mewarisi keperluan ForwardIterator, ia berikutan bahawa membandingkan iterator daripada bekas yang berbeza adalah tingkah laku yang tidak ditentukan.

Isu LWG #446 secara khusus menangani isu ini dan mencadangkan pindaan berikut kepada standard:

"Hasil penilaian secara langsung atau tidak langsung mana-mana fungsi perbandingan atau perduaan - pengendali dengan dua nilai lelaran sebagai argumen yang diperoleh daripada dua julat berbeza r1 dan r2 tidak ditentukan, melainkan secara eksplisit diterangkan sebaliknya."

Pindaan ini menyerlahkan bahawa membandingkan lelaran daripada bekas yang berbeza, melainkan ia adalah subjulat daripada julat sepunya, adalah tingkah laku yang tidak ditentukan.

Atas ialah kandungan terperinci Bolehkah Iterator dari Bekas Berbeza Dibandingkan 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