我构建了一个在C ++中生成随机二维数组的函数。我希望我可以在编译时设置数组的大小,所以我在数组中包含了行数和列数的变量。但是,当我尝试编译该函数时,我得到一个关于数组的存储大小不是常数的错误。这似乎与我必须添加到数组定义的static
关键字有关,因此我可以从函数返回指针。我不确定是否有办法绕过这个错误?任何建议。
double * generate_random_array(int rows, int cols, double lower_, double upper_){
static double test_array[rows][cols];
for (int i = 0; i < sizeof test_array / sizeof test_array[0]; i++) {
for (int j = 0; j < sizeof test_array[0] / sizeof(double); j++) {
test_array[i][j] = generate_random_numbers(lower_, upper_);
}
}
return(test_array);
}
答案 0 :(得分:6)
您可以generate_random_array
成为template
,强制rows
和cols
在编译时知道:
template <int rows, int cols>
double* generate_random_array(double lower_, double upper_)
{
/* ... as before ... */
}
使用示例:
generate_random_array<5, 10>(51.4, 66.0);
尽管如此,您应该使用std::array
而不是C风格的数组。如果您想要可调整大小的数组,那么您应该使用std::vector
代替。
std::array
示例:
template <int rows, int cols>
auto generate_random_array(double lower_, double upper_)
{
const auto idx = [](int x, int y){ return y * rows + x; };
std::array<double, rows * cols> result;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[idx(i, j)] = generate_random_numbers(lower_, upper_);
}
}
return result;
}
使用示例:
auto test_array = generate_random_array<5, 10>(11.0, 66.33);