| 查看: 1404 | 回复: 19 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
lixy1217木虫 (著名写手)
|
[交流]
C++对高维数组有什么比较好的操作方式?已有2人参与
|
||
|
如题,所谓高维就是维数>3的情形。一般来说1维用一个指针,二维用两个指针,可维数一旦高了,例如10维的,在前面加10个 * 至少看着也不舒服吧~ 而且如果要定义一个类,可以任意确定维数的,那么用加*的方式就更加没有办法应对了。当然可以换做链表的存储方式,但链表访问元素的计算耗时是不可忽略的。 另外有一个解决的方式,就是把所有的数值储存在一个数组中,再用一个长度等于维数的整数数组作为元素下标,调用元素时,只需要利用该下标的位置找到对应元素即可。可这样的话,需要消耗多少额外的计算量呢? 不知道除此之外还有什么更好的应对方式。 |
» 猜你喜欢
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有7人回复
申请2026年博士
已经有5人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有5人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有6人回复
2025冷门绝学什么时候出结果
已经有7人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有6人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有7人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复

virtualzx
木虫 (著名写手)
- 应助: 263 (大学生)
- 金币: 7161.3
- 红花: 54
- 帖子: 1605
- 在线: 317.6小时
- 虫号: 2069080
- 注册: 2012-10-18
- 性别: GG
- 专业: 理论和计算化学
★
小木虫: 金币+0.5, 给个红包,谢谢回帖
小木虫: 金币+0.5, 给个红包,谢谢回帖
|
如果自定义类就不该再用星号了,你应该定义一个类,类内部储存一维结构,然后重置[]就可以了。只需要存储每一维的位移量,计算坐标就可以用整数列相乘求和得到,这样需要的操作数就从N^2降到N数量级了;这和你直接用[][][]...的计算量是一样的。当然现实中一般都是等距位移,不需要这么复杂。不过你可能会禁不住诱惑又加上许多其他运算--不过还是忍住为好 发自小木虫IOS客户端 |
13楼2016-02-08 23:44:35
liqizuiyang
木虫 (著名写手)
- 应助: 59 (初中生)
- 金币: 6859.5
- 散金: 261
- 红花: 94
- 帖子: 2093
- 在线: 708.9小时
- 虫号: 2366686
- 注册: 2013-03-21
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
2楼2015-09-14 19:22:57
charleslian
木虫 (小有名气)
- 应助: 21 (小学生)
- 金币: 1725.5
- 散金: 100
- 红花: 7
- 帖子: 83
- 在线: 49.3小时
- 虫号: 1089067
- 注册: 2010-09-04
- 专业: 凝聚态物性 II :电子结构
★ ★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+3, 谢谢参与 2015-09-15 08:36:22
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+3, 谢谢参与 2015-09-15 08:36:22
|
最后一个方法最好。不存在计算量的额外消耗,只是把高维数组的隐式存储变成显式的,对任意维度的数组只能这么做。只是会增加代码量,使程序不明晰。 发自小木虫IOS客户端 |
3楼2015-09-14 22:25:48
zzy滴号
金虫 (小有名气)
- 应助: 18 (小学生)
- 金币: 5449.9
- 散金: 367
- 红花: 1
- 帖子: 282
- 在线: 895.6小时
- 虫号: 1540568
- 注册: 2011-12-17
- 性别: GG
- 专业: 理论和计算化学
★ ★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+3, 谢谢参与 2015-09-15 08:29:38
小木虫: 金币+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













回复此楼
建议改用Fortran。