首頁 > 後端開發 > C++ > 為什麼 `vector.size() - 1` 在 C 中不回傳 -1 ?

為什麼 `vector.size() - 1` 在 C 中不回傳 -1 ?

Susan Sarandon
發布: 2024-12-02 19:21:11
原創
280 人瀏覽過

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

C 中的向量大小異常

在 C 中,向量容器的 size() 方法傳迴向量中元素的數量。然而,當向量為空時,會出現令人費解的行為,如以下程式碼片段所示:

#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
}
登入後複製

為什麼第二個輸出不是 -1?

第一個 cout 語句正確印出 0,表示向量為空。然而,第二個語句令人驚訝地輸出了一個非常大的正數,而不是預期的 -1。發生這種情況是因為 vector::size() 傳回 size_t 類型的無符號整數。顧名思義,無符號整數不能表示負數。

因此,當將 size_t 值從自身中減去時,它實際上會繞回該類型的最大可表示數字。在這種情況下,size_t 通常是一個 64 位元整數,因此它可以容納的最大值是 18446744073709551615。該值是作為第二個 cout 語句的輸出打印的值。

期間發生的情況第二次計算?

以下計算順序解釋了第二個 cout 背後的行為:

  1. value.size() 傳回 0,一個 size_t 類型的無符號整數。
  2. value.size() - 1 計算 0 - 1,結果是18446744073709551615(最大可表示數size_t).
  3. cout 將此最大值列印為 1844674505.

以上是為什麼 `vector.size() - 1` 在 C 中不回傳 -1 ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板