作者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/cn.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