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

C++ 以 new 動態配置三維陣列的標準寫法

     編輯:關於C++

C++ 無原生多維陣列動態配置語法,需以「指標的指標的指標」分層配置。本文給出標準、無記憶體洩漏的三維陣列配置與釋放範本,並說明索引對應關係。

配置邏輯圖解

int ***arr = new int**[depth];      // 第 1 層:depth 個「面」
for (d) arr[d] = new int*[rows];    // 第 2 層:每面 rows 個「行」
for (r) arr[d][r] = new int[cols];  // 第 3 層:每行 cols 個「列」

完整程式碼(含釋放)

int main() {
    const int D=5, R=6, C=7;
    int ***arr = new int**[D];
    for (int d=0; d<D; ++d) {
        arr[d] = new int*[R];
        for (int r=0; r<R; ++r)
            arr[d][r] = new int[C];
    }

    // 測試讀寫
    arr[0][0][0] = 9;
    std::cout << arr[0][0][0]; // 輸出 9

    // 逆序釋放,嚴防洩漏
    for (int d=0; d<D; ++d) {
        for (int r=0; r<R; ++r)
            delete[] arr[d][r];
        delete[] arr[d];
    }
    delete[] arr;
    return 0;
}

現代 C++ 替代方案(推薦)

  • 扁平化一維陣列:std::vector<int> v(D*R*C); 索引 v[(d*R + r)*C + c],緩存友善、單次配置、自動釋放。
  • 巢狀 vector:std::vector<std::vector<std::vector<int>>> v(D, std::vector<std::vector<int>>(R, std::vector<int>(C))); 語意清晰但記憶體不連續。
  • C++23 std::mdspan:零開銷多維檢視,配合 std::vector 底層儲存,最佳選擇。
「手寫 new/delete 三維陣列是理解指標算術的好練習,但生產代碼請優先考慮標準容器或 mdspan。」
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved