[问题] 二维阵列型别

楼主: 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