C++之size_t

hisun9發表於2024-10-03

size_t 是 C++ 中的一個無符號整型,用於表示物件的大小或容器中的元素數量。它定義在 <cstddef> 標頭檔案或<cstdlib>標頭檔案中,通常用於陣列索引和記憶體分配。其大小取決於平臺(通常是 32 位或 64 位),因此在處理大資料時比 int 更安全。


特點

  1. 無符號型別:size_t 只能表示非負數,適合表示陣列索引和容器大小。

  2. 平臺依賴:其大小取決於編譯器和平臺,通常在 32 位系統上為 4 位元組,在 64 位系統上為 8 位元組。

  3. 標準庫使用:許多標準庫函式和資料結構(如 std::vector, std::string 等)使用 size_t 來表示大小和索引。


示例

  1. 陣列索引
    在處理陣列時,使用 size_t來定義索引和大小是個好習慣:
#include <iostream>

int main() {
    const size_t arraySize = 5;
    int arr[arraySize] = {1, 2, 3, 4, 5};

    for (size_t i = 0; i < arraySize; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

  1. STL 容器
    許多 STL 容器使用 size_t 來表示大小和索引。例如,使用 std::vector
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};

    for (size_t i = 0; i < vec.size(); ++i) {
        std::cout << "Element at index " << i << ": " << vec[i] << std::endl;
    }
    return 0;
}

  1. 動態記憶體分配
    在動態分配記憶體時,size_t 用於指定分配的位元組數:
#include <iostream>
#include <cstdlib> // 包含 malloc 和 free

int main() {
    size_t numElements = 10;
    int* arr = static_cast<int*>(malloc(numElements * sizeof(int))); // 使用 size_t

    if (arr != nullptr) {
        for (size_t i = 0; i < numElements; ++i) {
            arr[i] = i * 10;
            std::cout << arr[i] << " ";
        }
        std::cout << std::endl;
        free(arr); // 釋放記憶體
    }
    return 0;
}

  1. 與負值的安全性
    使用 size_t 可以避免因負值導致的錯誤:
#include <iostream>

int main() {
    size_t size = 10;
    for (size_t i = 0; i <= size; ++i) { // 這裡 i 是 size_t 型別,不能是負值
        std::cout << i << " "; // 防止越界
    }
    std::cout << std::endl;
    return 0;
}

如果使用 int 型別,可能會出現負索引,從而導致未定義行為。

總結

size_t 是一個用於表示大小和索引的安全選擇,能夠避免負值問題,特別是在處理大型資料集時非常有用。

相關文章