Rumah >pembangunan bahagian belakang >C++ >Mengapakah `vector.size() - 1` Mengembalikan Nombor Besar Daripada -1 untuk Vektor Kosong dalam C ?

Mengapakah `vector.size() - 1` Mengembalikan Nombor Besar Daripada -1 untuk Vektor Kosong dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 12:46:09623semak imbas

Why Does `vector.size() - 1` Return a Large Number Instead of -1 for Empty Vectors in 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!

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