gpt4 book ai didi

c++ - 从 C++ 中具有非常量数组大小的函数返回数组指针

转载 作者:行者123 更新时间:2023-11-30 00:45:39 26 4
gpt4 key购买 nike

我用 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);

}

最佳答案

您可以使generate_random_array成为模板,强制在编译时知道rowscols:

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);

live wandbox example

关于c++ - 从 C++ 中具有非常量数组大小的函数返回数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com