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;
}
std::vector<int> v(D*R*C); 索引 v[(d*R + r)*C + c],緩存友善、單次配置、自動釋放。std::vector<std::vector<std::vector<int>>> v(D, std::vector<std::vector<int>>(R, std::vector<int>(C))); 語意清晰但記憶體不連續。std::mdspan:零開銷多維檢視,配合 std::vector 底層儲存,最佳選擇。「手寫 new/delete 三維陣列是理解指標算術的好練習,但生產代碼請優先考慮標準容器或 mdspan。」