首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++11 新特性:std::array 容器詳解 - 固定大小、棧上分配、安全高效

     編輯:關於C++

為什麼需要 std::array?

  • C 數組:長度固定、棧上分配、效率高,但無邊界檢查、不可賦值、退化為指針、無尺寸感知。
  • std::vector:動態擴容、豐富接口,但堆上分配、有容量管理開銷,對於已知固定大小的場景略顯重。
  • std::array:固定大小、棧上分配、效率同數組、提供容器接口、支持邊界檢查、可直接賦值/拷貝,完美融合兩者優點。

基本用法

#include 
#include 
#include 

int main() {
    // 構造
    std::array a1;                    // 預設構造 (未初始化)
    std::array a2 = {1,2,3,4,5};      // 列表初始化 (C++11)
    std::array a3 = {1.2, 2.1, 3.1, 4.1};

    // 賦值與拷貝 (數組不支持)
    std::array a4 = a3; // 拷貝構造
    a4 = a3;                       // 拷貝賦值

    // 訪問
    a2[0] = 10;           // 無檢查
    a2.at(1) = 20;        // 有檢查,越界拋出 std::out_of_range
    std::cout << a2.front() << ' ' << a2.back() << '\n';

    // 容器操作
    std::sort(a2.begin(), a2.end());           // 算法支持
    std::reverse_copy(a2.begin(), a2.end(),
                      std::ostream_iterator(std::cout, " "));
    std::cout << '\n';

    // 範圍 for
    for (auto& x : a2) std::cout << x << ' ';
    std::cout << '\n';

    // 多維 array
    std::array, 2> matrix = {{
        {1,2,3},
        {4,5,6}
    }};
    std::cout << matrix[1][2] << '\n'; // 6

    return 0;
}

關鍵特性對比

特性C 數組std::vectorstd::array
大小固定是否是
存儲位置棧/靜態區堆棧/靜態區
可賦值/拷貝否是是
邊界檢查無at() 有at() 有
尺寸感知無 (退化為指針).size().size()
STL 算法支持指針迭代器完整完整
初始化列表C++11 支持支持支持

適用場景

  • 固定大小的查找表、查找表、狀態機轉移表、矩陣運算 (小尺寸)、嵌入式系統無堆內存環境。
  • 需要向函數傳遞固定大小集合且保持值語義時(避免指針退化)。
  • 替代 struct { T data[N]; } 手寫包裝器。

注意事項

  • 模板參數順序:std::array (類型在前,大小在後)。
  • 大小必須為編譯期常量。
  • 預設構造不初始化內建類型元素(同 C 數組),需手動初始化或用 {} 值初始化。
  • 無 push_back、resize 等動態操作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved