24小时热门版块排行榜    

查看: 1296  |  回复: 5

martialvv

铁虫 (初入文坛)

[求助] 类的数组成员初始化问题 已有2人参与

我建了一个方形矩阵类,有两个数据成员,如下:
class Matrix
{         private:                
                      int dim;        
                      int **mat;                 
        public:                
                      Matrix(int=2);        
                      void showMatrix();
};
其中dim是行数也是列数,用一个指针**mat指向这个二维数组,这个二维数组的行数和列数由dim定义。这个该怎么初始化(可以把全部元素初始化为0)?我试过如果把数组定义成 int mat[][10]这样给个具体数值是可以编译运行的,但灵活性不够,我希望从main函数输入一个整数赋值给dim,然后由dim定义矩阵的尺寸,该怎么实现呢?我查了网上其他人的做法,是把数组定义成一维的,并利用一个初始化函数定义矩阵大小,比如函数语句包含mat=new int[size],我模仿这个用int **mat = new int[dim][dim],但不能成功(即使我使用他们的程序,编译时也会提示size这里需要一个常数)。这个问题怎么解决?
谢谢。
回复此楼
Boncourage!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

绿遍山原

铜虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
martialvv: 金币+10, ★★★很有帮助 2014-10-16 23:32:16
CODE:
//分配内存
int *ptr = new int [dim*dim];
int **mat = new int *[dim];
for (int i = 0; i < dim; i++) mat[i] = &ptr[i*dim];
// 初始化
memset(mat[0], 0, dim*dim*sizeof(int));
// 释放
delete [] mat[0];
delete [] mat;

要夢遊,不要催眠。
2楼2014-10-15 14:12:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

martialvv

铁虫 (初入文坛)

引用回帖:
2楼: Originally posted by 绿遍山原 at 2014-10-15 14:12:49
//分配内存
int *ptr = new int ;
int **mat = new int *;
for (int i = 0; i < dim; i++) mat = &ptr;
// 初始化
memset(mat, 0, dim*dim*sizeof(int));
// 释放
delete [] mat;
delete [] mat;
...

谢谢,很给力,我测试成功了。只是有一点不太理解,就是释放内存的那两句,为什么只释放mat[0][] 就可以,而不用释放 mat[] i从1到dim-1 ?
我看别人的程序是直接对于ptr操作,我理解这段程序就是分配个dim*dim的内存,然后用mat的每个元素指向前面那段内存的每一段的开头(一共有有dim段),然后通过mat操作那段内存。这样是不是就好像饶了一个小弯,不是很简洁?
Boncourage!
3楼2014-10-15 16:51:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

martialvv

铁虫 (初入文坛)

引用回帖:
3楼: Originally posted by martialvv at 2014-10-15 16:51:22
谢谢,很给力,我测试成功了。只是有一点不太理解,就是释放内存的那两句,为什么只释放mat[] 就可以,而不用释放 mat[] i从1到dim-1 ?
我看别人的程序是直接对于ptr操作,我理解这段程序就是分配个dim*dim的内存 ...

不知道怎么变成斜体了,可能是小木虫自己的命令。那句话我是想问为什么不释放
mat[  i  ][   ]      i 从0到dim-1
Boncourage!
4楼2014-10-15 16:54:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

rbs

木虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
引用回帖:
2楼: Originally posted by 绿遍山原 at 2014-10-15 14:12:49
//分配内存
int *ptr = new int ;
int **mat = new int *;
for (int i = 0; i < dim; i++) mat = &ptr;
// 初始化
memset(mat, 0, dim*dim*sizeof(int));
// 释放
delete [] mat;
delete [] mat;
...

把导数第二句改成
delete ptr;
更好理解一点。

非常棒的分配二维数组的方法。
5楼2014-10-16 20:07:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

引用回帖:
5楼: Originally posted by rbs at 2014-10-16 20:07:09
把导数第二句改成
delete ptr;
更好理解一点。

非常棒的分配二维数组的方法。...

不,一般不会特意保存这个指针的。

[ 发自手机版 http://muchong.com/3g ]
6楼2014-10-16 20:38:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 martialvv 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:06 by XQNyDCa1Tk5n
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +3 wangyl_123 2026-10-10 6/300 2026-10-11 15:04 by Abin0406
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[教师之家] 课题组会帮你通过考核么? +3 好运来~9527 2026-10-10 5/250 2026-10-11 09:00 by 好运来~9527
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[基金申请] 入职后第一次管课题组的专利缴费,对账才发现官费比别人多掏了一倍 +5 13108017953 2026-10-08 5/250 2026-10-10 11:15 by wdwd123
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见