C new delete 高維陣列小結

2022-07-18 23:27:16 字數 1348 閱讀 3926

借鑑:

高維陣列的動態申請和釋放與二維陣列的類似,所以這裡只演示的是二維陣列的動態申請和釋放。

先來個大眾版的:

1 #include 2

3using

namespace

std;45

int main(void)6

1819

for (int i = 0; i < 3; i++)

20delete p[i];

2122

delete p;

2324

return0;

25 }

然後是各種new:

1. a (*ga)[n] = new a[m][n]; 

... 

delete ga; 

缺點:n必須是已知 

優點:呼叫直觀,連續儲存,程式簡潔(經過測試,析構函式能正確呼叫) 

2. a** ga = new a*[m]; 

for(int i = 0; i < m; i++) 

ga[i] = new a[n]; 

... 

for(int i = 0; i < m; i++) 

delete ga[i]; 

delete ga; 

缺點:非連續儲存,程式煩瑣,ga為a**型別 

優點:呼叫直觀,n可以不是已知 

3. a* ga = new a[m*n]; 

... 

delete ga; 

缺點:呼叫不夠直觀 

優點:連續儲存,n可以不是已知 

4. vector> ga; 

ga.resize(m); //這三行可用可不用 

for(int i = 1; i < n; i++) // 

ga[i].resize(n); // 

... 

缺點:非連續儲存,除錯不夠方便,編譯速度下降,程式膨脹(實際速度差別不大) 

優點:呼叫直觀,自動析構與釋放記憶體,可以呼叫stl相關函式,動態增長 

5. vector

ga; 

ga.resize(m*n); 

方法3,4的結合 

6. 2的改進版

a** ga = new a*[m]; 

ga[0] = new a[m*n]; 

for(int i = 1; i < m; i++) 

ga[i] = ga[i-1]+n; 

優點:連續儲存,n可以不是已知,析構方便,猜想只需delete ga;

問題:1.怎麼進行多維陣列的宣告和初始化?

2.是否能夠動態分配多維陣列,怎麼樣正確析構?

3.怎麼理解這些操作?

python matlab高維陣列轉置

原文 轉置可以對陣列進行重置,返回的是源資料的檢視 不會進行任何複製操作 轉置有三種方式,transpose方法 t屬性以及swapaxes方法。in 1 import numpy as np in 2 arr np.arange 20 reshape 4,5 生成乙個4行5列的陣列 in 3 ar...

numpy高維陣列獲取top K

理論知識請自行翻閱numpy的argpartition和partition方法的實現原理,該文章僅僅包含使用和效率驗證。此外,numpy版本需要 1.8.0。不廢話了,直接放 一看就懂,看不懂再說,自己跑一下就知道。import numpy as np defget sorted top k arr...

C語言學習篇 7陣列 二維陣列 高維陣列

說明 本文主要對陣列進行闡述,並對二維及高維陣列進行舉例。陣列 用來儲存一組同種型別資料的構造資料型別稱之為陣列。如何定義陣列?格式 型別修飾符 陣列名 元素個數或常量表示式 陣列的初始化 方式一 沒有賦初始值的元素,自動設定初值為0 示例 int b 5 只對前三個元素賦了初始值,後兩個元素自動設...