C++;-数组的动态指针 首先,我想说我是C++中的新手。 作为我的硕士论文的一部分,我编写了一个C++程序,它也得到了变量 m < /C>和 d>代码>(两个整数)。WAREd是2的幂(这意味着2^d元素)。参数m定义一个元素和整个组(2^d元素)之间可能的交互次数

C++;-数组的动态指针 首先,我想说我是C++中的新手。 作为我的硕士论文的一部分,我编写了一个C++程序,它也得到了变量 m < /C>和 d>代码>(两个整数)。WAREd是2的幂(这意味着2^d元素)。参数m定义一个元素和整个组(2^d元素)之间可能的交互次数,c++,arrays,dynamic,C++,Arrays,Dynamic,可能的交互次数计算如下: \kappa = \sum_{i=0}^m\binom{d}{i} (目前我为2^dx\kappa生成向量向量,但我的教授希望我为不同的m创建不同的统计数据。我的第一个想法是生成一个不同大小的m数组的动态数组……然后我想用所需的最大2d数组定义一个3维数组,但也需要编程。)速度很重要(例如d=20) 我想征求您的意见,如何定义这种动态数组,也将是快速的 关于使用boost多维数组 例如,看看这段代码,这很简单 #include "boost/multi_array.

可能的交互次数计算如下:

\kappa = \sum_{i=0}^m\binom{d}{i}
(目前我为
2^d
x\kappa生成向量向量,但我的教授希望我为不同的
m
创建不同的统计数据。我的第一个想法是生成一个不同大小的
m
数组的动态数组……然后我想用所需的最大2d数组定义一个3维数组,但也需要编程。)速度很重要(例如
d=20

我想征求您的意见,如何定义这种动态数组,也将是快速的


关于

使用boost多维数组

例如,看看这段代码,这很简单

#include "boost/multi_array.hpp"
#include <cassert>

int main () {
  // Create a 3D array that is 3 x 4 x 2
  typedef boost::multi_array<double, 3> array_type;
  typedef array_type::index index;
  array_type A(boost::extents[3][4][2]);

  // Assign values to the elements
  int values = 0;
  for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j)
      for(index k = 0; k != 2; ++k)
        A[i][j][k] = values++;

  // Verify values
  int verify = 0;
  for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j)
      for(index k = 0; k != 2; ++k)
        assert(A[i][j][k] == verify++);

  return 0;
}
#包括“boost/multi_array.hpp”
#包括
int main(){
//创建一个3 x 4 x 2的三维阵列
typedef boost::multi_array_type;
typedef数组_type::index索引;
数组_类型A(boost::extensts[3][4][2]);
//为元素指定值
int值=0;
对于(索引i=0;i!=3;++i)
对于(索引j=0;j!=4;++j)
对于(索引k=0;k!=2;++k)
A[i][j][k]=值++;
//验证值
int=0;
对于(索引i=0;i!=3;++i)
对于(索引j=0;j!=4;++j)
对于(索引k=0;k!=2;++k)
断言(A[i][j][k]==verify++);
返回0;
}

如果代码和数学速度对你来说很重要,我必须问你为什么不使用FORTRAN而不是C++?真的吗?我认为BLITIZ+++已经证明C++在C++中可以与ForTan竞争。在高性能数字压缩中,你是使用原生C++向量还是在标准编程库中的向量类?告诉自己,我不知道C++或FORTRAN,所以我选择C++,因为它理解它将来会更有用,也可能更容易应用多线程计算。Booost支持锯齿数组吗?我想这就是鹰的需要。我在Boost项目中看过之前也看过这个代码,但是使用Boost多数组Ty。pe,您需要在编译时定义大小,我只知道在运行时(执行时)维度的大小。假设在我的情况下m=3,但我的另外两个维度对于所有m的大小都不相同。让我们忘记关于accues speed的讨论,使用向量将生成一个[m][n][p]数组,比我需要的大。我需要一个[n_0][p_0]的数组,对于m=1我需要一个[n_1][p_1]的数组,等等。是n_0\neq n_1等等。我还可以定义n_max=max(n_0,n_1,…)和p_max=max(p_0,p_1,…)并生成[m}[n_max][p_max],但我担心这种代码实现会降低执行速度…你可以为向量中的每个元素调用.resize(),vectorDoc Brown也是如此,你能写一个例子说明如何将元素添加到向量中吗?也可以使用push_back(),这也是一种调整大小的方法。