C++ blitz++多维数组,稍后声明其维度

C++ blitz++多维数组,稍后声明其维度,c++,arrays,multidimensional-array,containers,blitz++,C++,Arrays,Multidimensional Array,Containers,Blitz++,好的,我知道一种在blitz中声明多维数组的方法。你会这样做: blitz::Array<double, 3> blitzArray( 3, 4, 5 ); 但是,如果我想声明数组而不在开始时指定维度,该怎么办呢。 你看,尺寸总是不同的。就像第一个维度开始时是3,然后变成8,然后是2等等,其他维度也是如此。 现在我有了这些维度的循环。我的代码解析一个文件并可以输入维度。 所以我可以做一些类似的事情: blitz::Array<double, 3> blitzArray;

好的,我知道一种在blitz中声明多维数组的方法。你会这样做:

blitz::Array<double, 3> blitzArray( 3, 4, 5 );
但是,如果我想声明数组而不在开始时指定维度,该怎么办呢。 你看,尺寸总是不同的。就像第一个维度开始时是3,然后变成8,然后是2等等,其他维度也是如此。 现在我有了这些维度的循环。我的代码解析一个文件并可以输入维度。 所以我可以做一些类似的事情:

blitz::Array<double, 3> blitzArray;    //declaration
//later in the program after doing stuff
f=0
for(i=0;i<n;i++){
 for(j=0;j<m;++j){
  for(k=0;k<o;++k){       //n,m,o are decided by some other constraints, doesn't matter
   blitzArray(i,j,k)=foo[f++]; //foo is a vector<double>

在这里,我制作了一个数组数组,在每个数组单元格中输入foo向量中的内容。但是维度不断变化。

我不知道是否需要用闪存++来实现,但是你可能想看看另一个C++库,MARLY:。它的特点是多维数组和视图,它们的尺寸、形状、大小和索引顺序第一个或最后一个坐标主顺序可以在运行时设置和更改。我将立即对此进行研究。但是学习新材料需要相当长的时间…我没有。一个3d矢量能做到吗?你是说矢量的矢量?我想它可以完成这项工作,但也有缺点:首先,必须小心调整每个内部向量的大小,否则很容易使用操作符[]访问不存在的向量元素,并获得未定义的行为。其次,运行时分别调整每个内部向量的大小意味着多个内存分配,这比一个内存分配的性能更差。不知道这对你的任务是否至关重要。糟糕……不打算使用向量。查找有关mArrays的文档。找不到足够的。然后遇到了一个pdf文件,它使一切变得复杂,看起来像是对微积分和置换等的引用。现在来看boost/multi_数组。这会起作用,不是吗?在创建boost::multi_阵列实例时,仍然需要指定维度,但好消息是,可以使用其他功能,如调整大小、重塑形状和创建视图。顺便说一句,您还可以尝试创建一个映射或散列,其中包含三个索引作为键的结构。因此,您可以在运行时使用运算符[]实际插入元素,还可以避免不真正需要的数组元素的额外内存损失。您可以在C++中阅读关联容器。
blitz::Array<double, 3> blitzArray;    //declaration
//later in the program after doing stuff
f=0
for(i=0;i<n;i++){
 for(j=0;j<m;++j){
  for(k=0;k<o;++k){       //n,m,o are decided by some other constraints, doesn't matter
   blitzArray(i,j,k)=foo[f++]; //foo is a vector<double>