[問題] 二維陣列型別

作者: oToToT (屁孩)   2017-08-03 18:12:10
開發平台(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++的基礎觀念有點差,若有些概念是錯的還請大家指正
作者: JFLung9536 (立月小蛇)   2017-08-03 18:43:00
int[][]**ptr ?
作者: moebear (萌熊)   2017-08-03 19:57:00
int(*A)[N] = new int[N][N];上面應該是你要的 配成靜態int A[10][10]也可以先做一個100的空間再切成二維陣列
作者: jim1029 (大宗)   2017-08-03 20:00:00
int (*A)[N]
作者: kevin85421 (安安)   2017-08-03 22:38:00
int** A = new int* [N] ; 然後再用迴圈對int* new 一維的dynamic array
作者: dzwei (Cout<< *p << \n ;)   2017-08-04 01:28:00
推樓上的用法但是記得delete的時候也要迴圈否則會造成memory fragment其實這個case可以考慮用c++的list如果你要講求效能的話可以這樣:int *ary = new int[sizeX * sizeY];ary[y*sizeX + x]但如果是團隊合作個人是不建議,一來不方便閱讀,二來,你的case有必要連這麼一點點時間都要爭取嗎?如果你很care時間的話,你還可以把上面第一個方法的迴圈步份,開執行緒進行初始化,但是我目前做到現在的case(我只是個小小的研究生跟著老闆在接外面的case)很少有情況,連那一點時間都要@@對了 剛剛上面那個ary[y*sizeX + x]在3維以上的陣列就會很複雜,所以不建議用在高維振烈https://goo.gl/QR98fb參考這篇我說的複雜是指你今天想把它從2*3*4改成6*5*7這種動態的改變size
作者: AstralBrain   2017-08-07 18:53:00
競賽用直接在global開一塊夠大的就好啊還有看起來你的N是常數 用tr1::array就行啦

Links booklink

Contact Us: admin [ a t ] ucptt.com