Rumah >pembangunan bahagian belakang >C++ >Mengapakah `vector.size() - 1` Mengembalikan Nombor Besar Daripada -1 untuk Vektor Kosong dalam C ?
Memahami Saiz Vektor dalam C : Mengapa Saiz() - 1 Boleh Menghasilkan Keputusan Mengejutkan
Dalam C , kelas vektor menyediakan mekanisme yang berkuasa untuk menguruskan tatasusunan dinamik. Walau bagaimanapun, adalah penting untuk memahami kehalusan fungsi size(), terutamanya apabila berurusan dengan vektor kosong.
Pertimbangkan coretan kod berikut:
#include <vector> #include <iostream> using namespace std; int main() { vector<int> value; cout << value.size() << endl; // output 0 cout << value.size() - 1 << endl; // output 18446744073709551615 }
Sementara pernyataan cout pertama menghasilkan output dengan betul 0, menunjukkan vektor kosong, pernyataan kedua menghasilkan nombor besar yang tidak dijangka: 18446744073709551615. Apakah yang menyebabkan tingkah laku yang tidak dijangka ini?
Perwakilan Integer Tidak Ditandatangani
Kunci untuk memahami isu ini terletak pada sifat jenis size_t. size() mengembalikan saiz vektor, yang merupakan jenis integer yang tidak ditandatangani. Integer yang tidak ditandatangani digunakan untuk mewakili nilai bukan negatif, bermakna mereka tidak boleh menyimpan nombor negatif.
Limpahan dan Salah Nyata Nilai
Apabila fungsi saiz() digunakan pada vektor kosong, ia mengembalikan 0. Menolak 1 daripada 0 melimpah nilai size_t yang tidak ditandatangani. Hasilnya membungkus kepada nilai maksimum yang boleh diwakili oleh saiz_t: 18446744073709551615.
Implikasi untuk Pengaturcaraan
Tingkah laku ini boleh membawa kepada pepijat halus apabila bekerja dengan vektor . Sebagai contoh, adalah tidak selamat untuk menganggap saiz() - 1 akan sentiasa kembali -1 apabila vektor kosong. Isu ini amat relevan apabila melelaran pada vektor kosong menggunakan gelung for.
Untuk mengelakkan isu sedemikian, anda dinasihatkan untuk menggunakan size() dengan berhati-hati dan berhati-hati mempertimbangkan logik apabila menolak 1 daripada nilainya. Apabila perlu, kaedah alternatif, seperti menggunakan semakan eksplisit untuk vektor kosong, harus digunakan untuk memastikan kefungsian yang betul.
Atas ialah kandungan terperinci Mengapakah `vector.size() - 1` Mengembalikan Nombor Besar Daripada -1 untuk Vektor Kosong dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!