作者oToToT (屁孩)
看板C_and_CPP
標題[問題] 二維陣列型別
時間Thu Aug 3 18:12:10 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
Any
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
問題(Question):
小弟平常要new一個二維陣列時,都是直接
auto A = new int[N][N];
但是auto是C++11才開始支援的語法,若是無法使用auto型別時,該改成什麼?
編譯器給出的型別貌似是
int (*)[N] 但是寫成
int (*)[N] A = new int[N][N]
也是一樣無法編譯成功QQ
補充說明(Supplement):
小弟C/C++的基礎觀念有點差,若有些概念是錯的還請大家指正
--
Send from JPTT on my Google Glasses
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.96.141
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1501755140.A.FEC.html
1F:推 JFLung9536: int[][] 08/03 18:43
2F:→ JFLung9536: **ptr ? 08/03 18:44
3F:→ moebear: int(*A)[N] = new int[N][N]; 08/03 19:57
4F:→ moebear: 上面應該是你要的 配成靜態int A[10][10] 08/03 19:58
5F:→ moebear: 也可以先做一個100的空間再切成二維陣列 08/03 19:59
6F:推 jim1029: int (*A)[N] 08/03 20:00
恩恩,這樣就對了~謝謝大大,原來編譯器給的意思是這樣
7F:推 kevin85421: int** A = new int* [N] ; 然後再用迴圈對int* new 一 08/03 22:38
8F:→ kevin85421: 維的dynamic array 08/03 22:38
9F:推 dzwei: 推樓上的用法 08/04 01:28
10F:→ dzwei: 但是記得delete的時候也要迴圈 08/04 01:28
11F:→ dzwei: 否則會造成memory fragment 08/04 01:28
這個做法我其實知道,不過感覺會多一個O(N)的時間
12F:→ dzwei: 其實這個case可以考慮用c++的list 08/04 01:30
其實我是在寫競賽的題目要存矩陣,然後要做一些矩陣的運算,所以感覺list好像不太行,
加上我記得STL的list常數有點大(ry
13F:推 dzwei: 如果你要講求效能的話可以這樣: 08/05 01:09
14F:→ dzwei: int *ary = new int[sizeX * sizeY]; 08/05 01:09
15F:→ dzwei: ary[y*sizeX + x] 08/05 01:10
對耶,也可以這樣~謝謝大大
16F:→ dzwei: 但如果是團隊合作個人是不建議,一來不方便閱讀, 08/05 01:10
17F:→ dzwei: 二來,你的case有必要連這麼一點點時間都要爭取嗎? 08/05 01:11
18F:推 dzwei: 如果你很care時間的話,你還可以把上面第一個方法的迴圈 08/05 01:13
19F:→ dzwei: 步份,開執行緒進行初始化,但是我目前做到現在的case 08/05 01:14
20F:→ dzwei: (我只是個小小的研究生跟著老闆在接外面的case) 08/05 01:14
21F:→ dzwei: 很少有情況,連那一點時間都要@@ 08/05 01:15
其實一般現實狀況是應該不太會有這麼刁鑽的情況,不過競賽就(ry
※ 編輯: oToToT (180.177.96.141), 08/06/2017 13:17:32
22F:推 dzwei: 對了 剛剛上面那個ary[y*sizeX + x]在3維以上的陣列就會 08/06 23:47
23F:→ dzwei: 很複雜,所以不建議用在高維振烈 08/06 23:47
25F:→ dzwei: 參考這篇 08/06 23:48
26F:推 dzwei: 我說的複雜是指 08/07 11:02
27F:→ dzwei: 你今天想把它從2*3*4改成6*5*7 08/07 11:02
28F:→ dzwei: 這種動態的改變size 08/07 11:02
29F:推 AstralBrain: 競賽用直接在global開一塊夠大的就好 08/07 18:53
30F:推 AstralBrain: 啊還有看起來你的N是常數 用tr1::array就行啦 08/07 23:51