24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1502  |  回复: 19

lixy1217

木虫 (著名写手)

[交流] C++对高维数组有什么比较好的操作方式? 已有2人参与

如题,所谓高维就是维数>3的情形。一般来说1维用一个指针,二维用两个指针,可维数一旦高了,例如10维的,在前面加10个 * 至少看着也不舒服吧~


而且如果要定义一个类,可以任意确定维数的,那么用加*的方式就更加没有办法应对了。当然可以换做链表的存储方式,但链表访问元素的计算耗时是不可忽略的。


另外有一个解决的方式,就是把所有的数值储存在一个数组中,再用一个长度等于维数的整数数组作为元素下标,调用元素时,只需要利用该下标的位置找到对应元素即可。可这样的话,需要消耗多少额外的计算量呢?


不知道除此之外还有什么更好的应对方式。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

偶尔敞开心扉,世界将不再孤独
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

zzy滴号

金虫 (小有名气)

★ ★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+3, 谢谢参与 2015-09-15 08:29:38
如果不考虑效率的话,可以使用标准库中的vector来完成多维数组,其中可使用typedef来使代码更清晰。如下:
typedef std::vector<int> myVector1D ;
typedef std::vector<myVector1D> myVector2D;
typedef std::vector<myVector2D> myVector3D;
typedef std::vector<myVector3D> myVector4D;
typedef std::vector<myVector4D> myVector5D;

使用时可以如下:
myVector1D numVector1D;
numVector1D.push_back(1);
numVector1D.push_back(2);

myVector1D numVector1D2;
numVector1D2.push_back(3);
numVector1D2.push_back(4);

myVector2D numVector2D;
numVector2D.push_back(numVector1D);
numVector2D.push_back(numVector1D2);

myVector3D numVector3D;
numVector3D.push_back(numVector2D);
       
myVector4D numVector4D;
numVector4D.push_back(numVector3D);

myVector5D numVector5D;
numVector5D.push_back(numVector4D);
       
int nNum = numVector5D[0][0][0][0][0];
天道酬勤
4楼2015-09-14 23:04:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ioadong

木虫 (著名写手)

★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+2, 时间空间不可得兼,有道理 2015-09-15 08:37:48
内存是一维的,要么是时间换空间,要么是空间换时间,根据需求来定吧。
以科学的理性代替天然的非理性。
5楼2015-09-15 00:38:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

liqizuiyang

木虫 (著名写手)

★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+2, 没用过,Fortran 有什么相关的功能吗? 2015-09-15 08:35:46
建议改用Fortran。
2楼2015-09-14 19:22:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

charleslian

木虫 (小有名气)

★ ★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+3, 谢谢参与 2015-09-15 08:36:22
最后一个方法最好。不存在计算量的额外消耗,只是把高维数组的隐式存储变成显式的,对任意维度的数组只能这么做。只是会增加代码量,使程序不明晰。

发自小木虫IOS客户端
3楼2015-09-14 22:25:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dlmufei

木虫 (小有名气)

★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+2, 谢谢参与 2015-09-15 08:37:57
所谓的高维数组只是表示形式,内存地址其实都是一维连续的,所以你最后一种方法可以通过指针首地址加上偏移量实现,缺点是你的自己计算多维到一维变换后的位置,为什么不直接使用多维访问,否则多维的意义何在?

发自小木虫Android客户端
牛逼是自己干出来的!
6楼2015-09-15 00:47:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
6楼: Originally posted by dlmufei at 2015-09-15 00:47:57
所谓的高维数组只是表示形式,内存地址其实都是一维连续的,所以你最后一种方法可以通过指针首地址加上偏移量实现,缺点是你的自己计算多维到一维变换后的位置,为什么不直接使用多维访问,否则多维的意义何在?
...

多维主要是针对数学问题而言,而不是程序本身。不过看来用偏移量实现是求解高维(>3)问题最好的办法了,只有在程序设计的细节方面不断改进一下。
偶尔敞开心扉,世界将不再孤独
7楼2015-09-15 08:26:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
4楼: Originally posted by zzy滴号 at 2015-09-14 23:04:02
如果不考虑效率的话,可以使用标准库中的vector来完成多维数组,其中可使用typedef来使代码更清晰。如下:
typedef std::vector<int> myVector1D ;
typedef std::vector<myVector1D> myVector2D;
ty ...

这应该是比较常规的方法吧。其实我更希望的是能把维数作为一个参变量的方式分离出来。也就是用一个类名表示任意维数,在类的成员中用一个专门的整型变量n表示对象对应的维数。
偶尔敞开心扉,世界将不再孤独
8楼2015-09-15 08:34:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
3楼: Originally posted by charleslian at 2015-09-14 22:25:48
最后一个方法最好。不存在计算量的额外消耗,只是把高维数组的隐式存储变成显式的,对任意维度的数组只能这么做。只是会增加代码量,使程序不明晰。

看来只能这么做了~
偶尔敞开心扉,世界将不再孤独
9楼2015-09-15 08:36:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dk1013

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
很好奇楼主是什么样的问题必须得用10维数组。
到得还来别无事 庐山烟雨浙江潮
10楼2015-09-17 11:05:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lixy1217 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 292分,材料与化工,申请调剂 +19 程晴之 2026-04-01 22/1100 2026-04-02 10:29 by 氯化亚硝酰
[考研] 301求调剂 +5 骆驼男人 2026-04-02 5/250 2026-04-02 10:18 by longlotian
[考研] 372求调剂 +3 jj涌77 2026-04-02 3/150 2026-04-02 09:57 by olim
[考研] 计算机265跨调环境 +3 Yumeng_6 2026-03-27 3/150 2026-04-02 09:53 by yulian1987
[考研] 一志愿北京科技,085601总分305求调剂 +9 半生瓜! 2026-04-01 11/550 2026-04-02 08:28 by Wang200018
[考研] 材料工程322分 +7 哈哈哈吼吼吼哈 2026-04-01 7/350 2026-04-02 07:05 by yjolah
[考研] 求生物学调剂 +8 15172915737 2026-04-01 8/400 2026-04-02 06:49 by ilovexiaobin
[考研] 310分求调剂 +4 成功上岸wang 2026-04-01 4/200 2026-04-01 20:35 by liu823948201
[考研] 285求调剂 +7 AZMK 2026-03-30 13/650 2026-04-01 17:00 by 七度不信任
[考研] 化学0703 调剂 306分 一志愿211 +12 26要上岸 2026-03-28 12/600 2026-04-01 11:10 by chemdavid
[考研] 求调剂,一志愿北林食品与营养095500,301分,已过六级,有科研经历 +4 快乐储蓄罐 2026-03-31 4/200 2026-04-01 09:26 by JourneyLucky
[考研] 333求调剂 +4 阿科逸 2026-03-31 4/200 2026-04-01 09:11 by jp9609
[考研] 土木304求调剂 +5 顶级擦擦 2026-03-31 5/250 2026-04-01 08:15 by fdcxdystjk¥
[考研] 318求调剂 +10 陈晨79 2026-03-30 10/500 2026-03-31 17:37 by 544594351
[考研] 315求调剂 +6 akie... 2026-03-28 7/350 2026-03-31 16:48 by asdfzly
[考研] 一志愿南昌大学324求调剂 +6 hanamiko 2026-03-29 6/300 2026-03-31 16:35 by hypershenger
[考研] 学硕274求调剂 +17 Li李鱼 2026-03-26 17/850 2026-03-31 15:19 by 客尔美德
[考研] 297 地理学070500 复试求调剂 +3 小圆圈圈ooo 2026-03-30 3/150 2026-03-30 21:05 by 余震yz
[考研] 272求调剂 +7 脚滑的守法公民 2026-03-27 7/350 2026-03-27 17:23 by laoshidan
[考研] 考研调剂 +9 小蜡新笔 2026-03-26 9/450 2026-03-27 11:10 by 不吃魚的貓
信息提示
请填处理意见