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+1 | 1 |
| 記憶體碎片 | 多 | 無 |
| 快取友善 | 差 | 優 |
| 釋放複雜度 | 雙重迴圈 | 單一 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; }
// 禁用複製或實作深拷貝
};
** 型別:保留指標陣列或轉換層。正確釋放是基礎,選對資料結構才是效能關鍵。