名稱空間
變體
操作

std::array

來自 cppreference.com
< cpp‎ | container
 
 
 
 
定義於標頭檔案 <array>
template<

    class T,
    std::size_t N

> struct array;
(C++11 起)

std::array 是一個封裝了固定大小陣列的容器。

此容器是一個聚合型別,其語義等同於一個保有一個 C 風格陣列 T[N] 作為其唯一非靜態資料成員的結構體。與 C 風格陣列不同,它不會自動退化成 T*。作為一個聚合型別,它可以用聚合初始化,給予最多 N 個可轉換到 T 的初始化器進行初始化:std::array<int, 3> a = {1, 2, 3};

該結構體結合了 C 風格陣列的效能和可訪問性以及標準容器的優點,例如知曉自身大小、支援賦值、隨機訪問迭代器等。

std::array 滿足容器 (Container) 和可逆容器 (ReversibleContainer) 的要求,除了預設構造的 array 不為空以及交換的複雜度是線性的,滿足連續容器 (ContiguousContainer) 的要求,(C++17 起) 並且部分滿足序列容器 (SequenceContainer) 的要求。

對於零長度陣列(N == 0)有一個特殊情況。在這種情況下,array.begin() == array.end(),它是一個唯一的某個值。在零大小的 array 上呼叫 front()back() 的效果是未定義的。

一個 array 也可以用作一個包含 N 個相同型別元素的元組。

目錄

[編輯] 迭代器失效

通常情況下,指向 array 的迭代器在 array 的整個生命週期內永遠不會失效。但需要注意,在交換操作期間,迭代器將繼續指向相同的陣列元素,因此其值會發生改變。

[編輯] 模板引數

T - 元素型別。必須是可移動構造 (MoveConstructible) 和可移動賦值 (MoveAssignable) 的。
N - 陣列中元素的數量,或為 0

[編輯] 成員型別

成員型別 定義
value_type T[編輯]
size_type std::size_t[編輯]
difference_type std::ptrdiff_t[編輯]
reference value_type&[編輯]
const_reference const value_type&[編輯]
pointer value_type*[編輯]
const_pointer const value_type*[編輯]
iterator

指向 value_type遺留隨機訪問迭代器 (LegacyRandomAccessIterator) 和遺留連續迭代器 (LegacyContiguousIterator)

(C++17 前)

指向 value_type 的,身為字面型別 (LiteralType) 的遺留隨機訪問迭代器 (LegacyRandomAccessIterator) 和遺留連續迭代器 (LegacyContiguousIterator)

(C++17 起)
(C++20 前)

指向 value_type遺留隨機訪問迭代器 (LegacyRandomAccessIterator)、連續迭代器 (contiguous_iterator) 和常量表達式迭代器 (ConstexprIterator)

(C++20 起)
[編輯]
const_iterator

指向 const value_type遺留隨機訪問迭代器 (LegacyRandomAccessIterator) 和遺留連續迭代器 (LegacyContiguousIterator)

(C++17 前)

指向 const value_type 的,身為字面型別 (LiteralType) 的遺留隨機訪問迭代器 (LegacyRandomAccessIterator) 和遺留連續迭代器 (LegacyContiguousIterator)

(C++17 起)
(C++20 前)

指向 const value_type遺留隨機訪問迭代器 (LegacyRandomAccessIterator)、連續迭代器 (contiguous_iterator) 和常量表達式迭代器 (ConstexprIterator)

(C++20 起)
[編輯]
reverse_iterator std::reverse_iterator<iterator>[編輯]
const_reverse_iterator std::reverse_iterator<const_iterator>[編輯]

[編輯] 成員函式

隱式定義的成員函式
(建構函式)
(隱式宣告)
遵循聚合初始化規則初始化陣列(注意,對於非類型別的 T,預設初始化可能導致不確定的值)
(公開成員函式)
(解構函式)
(隱式宣告)
銷燬陣列的每個元素
(公開成員函式)
operator=
(隱式宣告)
用另一個數組的對應元素覆寫陣列的每個元素
(公開成員函式)
元素訪問
訪問指定的元素,帶邊界檢查
(公開成員函式) [編輯]
訪問指定的元素
(公開成員函式) [編輯]
訪問第一個元素
(公開成員函式) [編輯]
訪問最後一個元素
(公開成員函式) [編輯]
直接訪問底層連續儲存
(公開成員函式) [編輯]
迭代器
返回指向起始的迭代器
(公開成員函式) [編輯]
返回指向末尾的迭代器
(公開成員函式) [編輯]
返回指向起始的逆向迭代器
(公開成員函式) [編輯]
返回指向末尾的逆向迭代器
(公開成員函式) [編輯]
容量
檢查容器是否為空
(公開成員函式) [編輯]
返回元素數量
(公開成員函式) [編輯]
返回元素的最大可能數量
(公開成員函式) [編輯]
操作
用指定值填充容器
(公開成員函式) [編輯]
交換內容
(公開成員函式) [編輯]

[編輯] 非成員函式

(C++11 起)(C++11 起)(C++20 中移除)(C++11 起)(C++20 中移除)(C++11 起)(C++20 中移除)(C++11 起)(C++20 中移除)(C++11 起)(C++20 中移除)(C++20 起)
按字典序比較兩個 array 的值
(函式模板) [編輯]
訪問 array 的一個元素
(函式模板) [編輯]
特化 std::swap 演算法
(函式模板) [編輯]
(C++20)
從一個內建陣列建立一個 std::array 物件
(函式模板) [編輯]

[編輯] 輔助類

獲得 array 的大小
(類模板特化) [編輯]
獲得 array 元素的型別
(類模板特化) [編輯]

推導指引

(C++17 起)

[編輯] 示例

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
 
int main()
{
    // Construction uses aggregate initialization
    std::array<int, 3> a1{{1, 2, 3}}; // Double-braces required in C++11 prior to
                                      // the CWG 1270 revision (not needed in C++11
                                      // after the revision and in C++14 and beyond)
 
    std::array<int, 3> a2 = {1, 2, 3}; // Double braces never required after =
 
    // Container operations are supported
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    // Ranged for loop is supported
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
 
    // Deduction guide for array creation (since C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
 
    // Behavior of unspecified elements is the same as with built-in arrays
    [[maybe_unused]] std::array<int, 2> a5; // No list init, a5[0] and a5[1]
                                            // are default initialized
    [[maybe_unused]] std::array<int, 2> a6{}; // List init, both elements are value
                                              // initialized, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // List init, unspecified element is value
                                               // initialized, a7[0] = 1, a7[1] = 0
}

輸出

3 2 1
E Ǝ

[編輯] 參閱

可變大小、固定容量、原地連續陣列
(類模板) [編輯]
可變大小的連續陣列
(類模板) [編輯]
雙端佇列
(類模板) [編輯]
(庫基礎 TS v2)
建立一個 std::array 物件,其大小和可選的元素型別從引數中推導
(函式模板) [編輯]