命名空間
變體
動作

std::array

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

    class T,
    std::size_t N

> struct array;
(C++11 起)

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

此容器是一個聚合型別(aggregate type),其語義與持有一個 C 風格陣列 T[N] 作為其唯一非靜態資料成員的結構體(struct)相同。與 C 風格陣列不同的是,它不會自動退化(decay)為 T*。作為聚合型別,它可以使用 聚合初始化,並提供最多 N 個可轉換為 T 的初始化器:std::array<int, 3> a = {1, 2, 3};

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

std::array 滿足 ContainerReversibleContainer 的要求,除了預設建構的陣列並非空陣列,且交換(swap)的複雜度為線性時間。此外,它滿足 ContiguousContainer 的要求,(C++17 起) 並部分滿足 SequenceContainer 的要求。

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

陣列也可以被視為一個包含 N 個相同型別元素的元組(tuple)。

目錄

[編輯] 迭代器失效

通常情況下,陣列的迭代器在整個陣列生命週期內永遠不會失效。但需注意,在執行 swap 時,迭代器將繼續指向同一個陣列元素,因此其值會隨之改變。

[編輯] 模板參數

T - 元素型別 必須滿足 MoveConstructibleMoveAssignable
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_typeLegacyRandomAccessIteratorLegacyContiguousIterator

(直到 C++17)

LegacyRandomAccessIteratorLegacyContiguousIterator,且為 value_typeLiteralType

(自 C++17 起)
(直到 C++20)

指向 value_typeLegacyRandomAccessIteratorcontiguous_iteratorConstexprIterator

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

指向 const value_typeLegacyRandomAccessIteratorLegacyContiguousIterator

(直到 C++17)

LegacyRandomAccessIteratorLegacyContiguousIterator,且為 const value_typeLiteralType

(自 C++17 起)
(直到 C++20)

指向 const value_typeLegacyRandomAccessIteratorcontiguous_iteratorConstexprIterator

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

[編輯] 成員函數

隱式定義的成員函數
(建構子)
(隱式宣告)
依照 聚合初始化 規則初始化陣列(注意:預設初始化可能導致非類別型別 T 含有不確定的值)
(公開成員函式)
(解構函式)
(隱式宣告)
銷毀陣列中的每個元素
(公開成員函式)
operator=
(隱式宣告)
以另一個陣列的對應元素覆寫陣列中的每個元素
(公開成員函式)
元素存取
存取指定元素,並進行邊界檢查
(公開成員函式) [編輯]
存取指定元素
(公開成員函式) [編輯]
存取第一個元素
(公開成員函式) [編輯]
存取最後一個元素
(公開成員函式) [編輯]
直接存取底層連續儲存空間
(公開成員函式) [編輯]
迭代器
回傳指向起點的反覆器
(公開成員函式) [編輯]
回傳指向終點的反覆器
(公開成員函式) [編輯]
回傳指向起點的反向反覆器
(公開成員函式) [編輯]
回傳指向終點的反向反覆器
(公開成員函式) [編輯]
容量
檢查容器是否為空
(公開成員函式) [編輯]
回傳元素個數
(公開成員函式) [編輯]
回傳最大可能的元素個數
(公開成員函式) [編輯]
作業 (Operations)
以指定值填滿容器
(公開成員函數) [編輯]
交換內容
(公開成員函式) [編輯]

[編輯] 非成員函數

(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 的值
(函式模板) [edit]
存取 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 Ǝ

[編輯] 參閱

可調整大小、固定容量、原地連續陣列
(類別模板) [編輯]
可調整大小的連續陣列
(類別模板) [編輯]
雙端隊列 (double-ended queue)
(類別模板) [編輯]
(Library Fundamentals TS v2)
建立一個 std::array 物件,其大小以及(選用的)元素型別由參數推導得出
(函數模板) [編輯]
English Deutsch 日本語 中文(简体) 中文(繁體)