std::array

介紹

C++ 除了 C-style Array 外, STL 內還有 std::array 可以使用, std::array 是一個 Aggreate Type, 為 C-style Array 的 thin wrapper。

優點:

  • 可以提供 iterator 相關支援,以便和 STL 內的其他演算法一起使用,

  • 和 C-style Array 相比可以在型別上知道長度,

  • 不會被自動轉成 T* ,可以避免誤傳

  • 有 copy constructor 和 assignment constructor,使用上比較方便

  • 效能方面理論上等同於 C-stye Array。

缺點:

  • 需要 include

  • 寫起來較長

#include <array>

int main() {
    std::array<int, 3> foo = {1, 2, 3};
    foo[0] = 42;            // no bounds checking
    foo.at(1) = 42;         // with bounds checking
    std::get<2>(foo) = 42;  // use std::get template function
                            // compile-time bounds checking
}

注意事項

  • 使用 operator[] 一樣沒有 bounds checking,所以存取出超出範圍的值跟 C-style 一樣不會噴 exception
    • 使用 at 的話就有 bounds checking,不在範圍內會噴 exception

參考