首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 二維動態陣列正確建立與釋放:一維陣列模擬優化

     編輯:程式設計疑難解答

原始寫法(正確但可優化)

char **ptable = new char*[row];
for (int i=0; i

優化方案:單一連續記憶體塊

若每列長度相同,建議改用一維陣列模擬二維,減少碎片、提升快取命中率:

int row, col;
cin >> row >> col;
char *ptable = new char[row * col]; // 一次分配
// 存取:ptable[i * col + j] 等價於 ptable[i][j]
ptable[2 * col + 3] = 'A';
// 釋放
delete[] ptable;

優勢對比

指標指標陣列一維連續
分配次數row+11
記憶體碎片多無
快取友善差優
釋放複雜度雙重迴圈單一 delete[]
語法直觀度高需封裝

封裝建議

class Matrix {
    int rows, cols; char *data;
public:
    Matrix(int r, int c): rows(r), cols(c), data(new char[r*c]) {}
    char& at(int r, int c) { return data[r*cols + c]; }
    ~Matrix() { delete[] data; }
    // 禁用複製或實作深拷貝
};

適用場景

  • 矩陣運算、圖像處理、大規模網格模擬:優先一維連續。
  • 行長度不固定(鋸齒陣列):須用指標陣列。
  • 需傳遞給 C API 期望 ** 型別:保留指標陣列或轉換層。

正確釋放是基礎,選對資料結構才是效能關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved