【发布时间】:2013-07-08 13:31:35
【问题描述】:
我在 MATLAB 中构建了一个交替数字树算法,但由于它太慢,我正在用 C++ 重写程序。
在某个阶段,必须选择搜索哪棵树。根据 x、y 和 z 这三个值,必须搜索三分之二的树(存储为二维数组)。有没有办法引用一个二维数组,以便稍后在搜索功能中使用它?
伪代码示例:
double nodes1[12567][17];
double nodes2[8467][17];
double nodes3[11245][17];
fillMatrices(nodes1,nodes2,nodes3); // Here the matrices are filled with numbers from txt files.
if(condition1) // Based on x,y,z
{
nodes=nodes1;
}
elseif(condition2) // Based on x,y,z
{
nodes=nodes2;
}
else
{
nodes=nodes3;
}
searchTree(nodes,x,y,z); // Function call with variable 2d array nodes
我希望这个问题有点清楚。我对 C++ 还很陌生,是的,由于 MATLAB,我确实很难停止思考矩阵;)
我尝试了以下可能性:
double nodes[][] = nodes1[][];
double * nodes[] = nodes1[][17];
double nodes = &nodes1;
我知道数组在传递给函数时是通过引用方式传递的,但我无法理解二维数组的工作原理。希望你能帮助我!
问候,
恩斯特·扬
【问题讨论】:
-
使用
std::vector并忘记原始数组 -
@TonyTheLion 我认为向量是为了便于内存管理,并且似乎比标准数组慢。那些二维数组中的元素必须被访问数十亿次,使用向量时是否有任何重大的性能损失?
-
@EJG89:不,完全没有损失。为什么会有?你有没有分析过它?
-
@DeadMG 我只在 MATLAB 中对其进行了分析,其中 searchTree 函数被称为每个粒子 50k。请记住,目标是跟踪一百万个粒子(幸运的是在一个集群上)的性能是值得关注的。编辑:啊,我看到你不必每次调用都复制向量,但你可以引用它来节省开销?
标签: c++ reference multidimensional-array assign