参考静态2D数组?

时间:2014-04-09 23:09:02

标签: c++ arrays

我有一些静态大小的2D数组:

double quickStats[NUM_REPETITIONS][NUM_TRIALS];
double mergeStats[NUM_REPETITIONS][NUM_TRIALS];
double bstStats[NUM_REPETITIONS][NUM_TRIALS];

稍后,我想要引用其中一个:

double stats[NUM_REPETITIONS][NUM_TRIALS];

    if(i == 0) {
        stats = quickStats;
    }
    else if(i == 1) {
        stats = mergeStats;
    }
    else if(i == 2) {
        stats = bstStats;
    }

然而,这不起作用。

如果没有嵌套的for循环手动将每个元素复制到参考数组中,我该怎么做呢?

我只需要从统计数据中读取,这是为了避免冗余代码。

由于

3 个答案:

答案 0 :(得分:2)

试试这个:

#define NUM_REPETITIONS 10
#define NUM_TRIALS 10
double quickStats[NUM_REPETITIONS][NUM_TRIALS];
double mergeStats[NUM_REPETITIONS][NUM_TRIALS];
double bstStats[NUM_REPETITIONS][NUM_TRIALS];

int main(){
    double (* ptr)[NUM_TRIALS] =quickStats;
}

答案 1 :(得分:0)

像这样创建一个指向它的指针:

double (*stats)[NUM_REPETITIONS][NUM_TRIALS];

由于你的维度在编译时是已知的,你可以使用std::array<>,它更通用和可读:

std::array<std::array<double, NUM_TRIALS>, NUM_REPETITIONS> stat;

答案 2 :(得分:0)

引用必须在声明时初始化,以便您以后不能分配它。最好的办法是使用指针或在if分支中声明引用。

constexpr unsigned int N = 100;

double a[N][N] = {0};

/* Pointer. In your case, N should be NUM_TRAILS here */
double (*a_ptr)[N] = a;


/* Specified Reference Type */
double (&a_ref)[N][N] = a;

/* C++11 Auto Reference */
auto &a_autoref = a;

在此测试:Coliru