Rumah >pembangunan bahagian belakang >C++ >Mengapa Julat Piawai Menggunakan Selang Separuh Terbuka [mula, tamat) Daripada Selang Tertutup [mula, tamat]?

Mengapa Julat Piawai Menggunakan Selang Separuh Terbuka [mula, tamat) Daripada Selang Tertutup [mula, tamat]?

DDD
DDDasal
2024-12-21 00:19:11156semak imbas

Why Do Standard Ranges Use a Half-Open Interval [begin, end) Instead of a Closed Interval [begin, end]?

Mengapa Julat dalam Standard Adalah [mula, tamat) Daripada [mula, tamat]

Dalam Standard, penamat() fungsi ditakrifkan sebagai satu melepasi hujung julat dan bukannya pada hujung sebenar. Keputusan ini telah menjadi subjek perdebatan, dengan beberapa alasan kukuh yang ditawarkan dalam pembelaannya.

Salah satu hujah utama, seperti yang dinyatakan dengan fasih oleh Dijkstra, berpusat di sekitar kesederhanaan mengira saiz julat sebagai perbezaan antara akhir dan permulaan. Selain itu, kemasukan sempadan bawah (mula) dilihat lebih semula jadi, terutamanya dalam senario di mana jujukan merosot menjadi kosong. Sebaliknya, mengecualikan sempadan bawah akan memerlukan pengenalan nilai sentinel "satu-sebelum-permulaan", yang akan memperkenalkan kerumitan yang tidak perlu.

Konvensyen [mula, tamat) juga memudahkan pengendalian bersarang atau panggilan berulang kepada pembinaan berasaskan julat, membolehkannya dirantai secara semula jadi. Sebaliknya, julat dua kali tertutup akan membawa kepada ralat luar demi satu dan kod yang rumit dan bising. Pertimbangkan, sebagai contoh, partition [n0, n1)[n 1, n2)[n2,n3).

Begitu juga, gelung lelaran standard untuk (it = begin; it != end; it) melaksanakan tamat - masa mula. Ini akan menjadi jauh kurang boleh dibaca jika kedua-dua hujung adalah inklusif, terutamanya apabila berurusan dengan julat kosong.

Akhir sekali, konvensyen pengiraan berasaskan sifar sejajar dengan pendekatan [mula, tamat). Apabila dibentangkan dengan julat unsur N (seperti unsur tatasusunan), sifar berfungsi sebagai "permulaan" semula jadi yang membenarkan julat diwakili sebagai [0, N), mengelakkan offset atau pembetulan yang tidak perlu.

Kesimpulannya, konvensyen [mula, tamat) dalam julat adalah hasil daripada pilihan reka bentuk yang dipertimbangkan dengan teliti. Ia memastikan kesederhanaan dalam pengiraan saiz julat, keaslian apabila berurusan dengan jujukan kosong, kemudahan dalam mengendalikan pembinaan berasaskan julat bersarang dan penjajaran dengan pengiraan berasaskan sifar.

Atas ialah kandungan terperinci Mengapa Julat Piawai Menggunakan Selang Separuh Terbuka [mula, tamat) Daripada Selang Tertutup [mula, tamat]?. 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