Rumah >pembangunan bahagian belakang >C++ >Mengapa `vector.size() - 1` Tidak Mengembalikan -1 untuk Vektor Kosong dalam C ?

Mengapa `vector.size() - 1` Tidak Mengembalikan -1 untuk Vektor Kosong dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-12-01 09:52:14985semak imbas

Why Doesn't `vector.size() - 1` Return -1 for an Empty Vector in C  ?

Memahami Saiz Vektor dalam C

Dalam C , struktur data vektor ialah tatasusunan dinamik yang boleh melaraskan saiznya secara automatik apabila elemen ditambah atau dikeluarkan. Walau bagaimanapun, apabila bekerja dengan vektor, adalah penting untuk memahami gelagat saiz() apabila vektor kosong.

Mengapa saiz() - 1 bukan -1 untuk Vektor Kosong

Pertimbangkan coretan kod yang disediakan:

#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
}

Output pertama, 0, mewakili nombor dengan betul unsur dalam vektor kosong. Walau bagaimanapun, output kedua, yang menolak 1 daripada saiz, adalah tidak dijangka kerana ia mengembalikan integer besar yang tidak ditandatangani dan bukannya -1.

Sebab di sebalik tingkah laku ini terletak pada jenis size_t yang digunakan dalam vector::size (). size_t ialah jenis integer tidak bertanda yang direka untuk menyimpan bilangan elemen dalam vektor. Integer yang tidak ditandatangani tidak boleh mewakili nombor negatif, jadi sebarang percubaan untuk menolak 1 daripada 0 akan menghasilkan nilai integer yang tidak ditandatangani yang besar.

Kesimpulan

Adalah penting untuk diingat bahawa size_t ialah jenis tidak bertanda dan tidak boleh mewakili nombor negatif. Apabila bekerja dengan vektor, sentiasa mengambil kira potensi nilai integer tidak bertanda yang besar apabila menolak 1 daripada saiz vektor kosong.

Atas ialah kandungan terperinci Mengapa `vector.size() - 1` Tidak Mengembalikan -1 untuk Vektor Kosong 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