Rumah >pembangunan bahagian belakang >C++ >Mengapakah `size() - 1` Mengembalikan Nombor Positif yang Besar untuk Vektor C Kosong?

Mengapakah `size() - 1` Mengembalikan Nombor Positif yang Besar untuk Vektor C Kosong?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 06:30:14370semak imbas

Why Does `size() - 1` Return a Large Positive Number for Empty C   Vectors?

Anomali Saiz Vektor: Mengapa Saiz() - 1 Bukan -1 untuk Vektor Kosong

Coretan kod yang diberikan menunjukkan tingkah laku pelik dalam C vektor. Apabila vektor kosong (iaitu saiz() == 0), tolak 1 daripada saiznya mengembalikan nombor positif yang besar dan bukannya -1 yang dijangkakan.

Puncanya

Kunci untuk memahami tingkah laku ini terletak pada jenis data vektor::size(). Ia ditakrifkan sebagai size_t, jenis integer tidak bertanda. Tidak seperti integer yang ditandatangani, integer yang tidak ditandatangani tidak boleh mewakili nilai negatif.

Cout Kedua: Apa Yang Berlaku?

Apabila anda menolak 1 daripada saiz vektor kosong (iaitu 0) , hasilnya melimpah dan membungkus ke nilai terbesar yang mungkin untuk integer yang tidak ditandatangani. Ini kerana integer yang tidak ditandatangani menggunakan semua bit mereka untuk mewakili nilai positif dan apabila ia melimpah, ia bermula semula daripada 0.

Contoh

Dalam kod contoh, nilai .size() ialah 0 dan value.size() - 1 melimpah ke 18446744073709551615, iaitu nilai maksimum untuk integer 64-bit yang tidak ditandatangani (2^64 - 1).

Atas ialah kandungan terperinci Mengapakah `size() - 1` Mengembalikan Nombor Positif yang Besar untuk Vektor C Kosong?. 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