C++ array(STL array)的用法及初始化

2020-07-16 10:05:18
array<T,N> 模板定義了一種相當於標準陣列的容器型別。它是一個有 N 個 T 型別元素的固定序列。除了需要指定元素的型別和個數之外,它和常規陣列沒有太大的差別。顯然,不能增加或刪除元素。

模板範例的元素被內部儲存在標準陣列中。和標準陣列相比,array 容器的額外幵銷很小,但提供了兩個優點:如果使用 at(),當用一個非法的索引存取陣列元素時,能夠被檢測到,因為容器知道它有多少個元素,這也就意味著陣列容器可以作為引數傳給函數,而不再需要單獨去指定陣列元素的個數。

使用 array 容器型別時,需要在原始檔中包含標頭檔案 array。陣列容器非常好用,這裡有一個範例,展示了如何建立具有 100 個 double 型元素的 array<>:
std::array<double,100> data;
如果定義了一個 array 容器,卻沒有為元素指定初始值,那麼元素就不會被初始化;但是可以如下所示,將它們初始化為 0 或者和預設元素型別等效的值:
std::array<double, 100> data {};
使用該語句初始化後,容器中所有的元素都會變為 0.0。形參 N 必須是一個常數表示式(constant expression)並且容器中元素的個數不能變。當然,當建立 array 容器的範例時,要像建立常規陣列那樣,對元素進行初始化:
std::array<double, 10> values {0.5, 1.0, 1.5, 2.0};

初始化器列表中的 4 個值用於初始化前 4 個元素,其餘的元素都將為 0。圖 1 說明了這一點。


圖 1