看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1501755140.A.FEC.html
JFLung9536: int[][] 08/03 18:43
JFLung9536: **ptr ? 08/03 18:44
moebear: int(*A)[N] = new int[N][N]; 08/03 19:57
moebear: 上面應該是你要的 配成靜態int A[10][10] 08/03 19:58
moebear: 也可以先做一個100的空間再切成二維陣列 08/03 19:59
jim1029: int (*A)[N] 08/03 20:00
恩恩,這樣就對了~謝謝大大,原來編譯器給的意思是這樣
kevin85421: int** A = new int* [N] ; 然後再用迴圈對int* new 一 08/03 22:38
kevin85421: 維的dynamic array 08/03 22:38
dzwei: 推樓上的用法 08/04 01:28
dzwei: 但是記得delete的時候也要迴圈 08/04 01:28
dzwei: 否則會造成memory fragment 08/04 01:28
這個做法我其實知道,不過感覺會多一個O(N)的時間
dzwei: 其實這個case可以考慮用c++的list 08/04 01:30
其實我是在寫競賽的題目要存矩陣,然後要做一些矩陣的運算,所以感覺list好像不太行, 加上我記得STL的list常數有點大(ry
dzwei: 如果你要講求效能的話可以這樣: 08/05 01:09
dzwei: int *ary = new int[sizeX * sizeY]; 08/05 01:09
dzwei: ary[y*sizeX + x] 08/05 01:10
對耶,也可以這樣~謝謝大大
dzwei: 但如果是團隊合作個人是不建議,一來不方便閱讀, 08/05 01:10
dzwei: 二來,你的case有必要連這麼一點點時間都要爭取嗎? 08/05 01:11
dzwei: 如果你很care時間的話,你還可以把上面第一個方法的迴圈 08/05 01:13
dzwei: 步份,開執行緒進行初始化,但是我目前做到現在的case 08/05 01:14
dzwei: (我只是個小小的研究生跟著老闆在接外面的case) 08/05 01:14
dzwei: 很少有情況,連那一點時間都要@@ 08/05 01:15
其實一般現實狀況是應該不太會有這麼刁鑽的情況,不過競賽就(ry ※ 編輯: oToToT (180.177.96.141), 08/06/2017 13:17:32
dzwei: 對了 剛剛上面那個ary[y*sizeX + x]在3維以上的陣列就會 08/06 23:47
dzwei: 很複雜,所以不建議用在高維振烈 08/06 23:47
dzwei: https://goo.gl/QR98fb 08/06 23:48
dzwei: 參考這篇 08/06 23:48
dzwei: 我說的複雜是指 08/07 11:02
dzwei: 你今天想把它從2*3*4改成6*5*7 08/07 11:02
dzwei: 這種動態的改變size 08/07 11:02
AstralBrain: 競賽用直接在global開一塊夠大的就好 08/07 18:53
AstralBrain: 啊還有看起來你的N是常數 用tr1::array就行啦 08/07 23:51