gpt4 book ai didi

c++ - 我怎样才能拥有一个以二维数组作为参数的函数,而该数组有一个我想更改的参数/维度?

转载 作者:行者123 更新时间:2023-11-30 04:42:22 26 4
gpt4 key购买 nike

(我是一名学生,这是我第一次发帖,所以请放轻松。)我想创建一个将二维数组作为参数的函数,并且在该数组中,我想要一个变量,稍后我想在代码中对其进行修改。这是最接近我想要的例子的东西:

int size;  //the variable I want to change later
void function(int[][size]);

int main(){
cin >> size;
int array[size][size]; //the array I'm using with the variable as a parameter
function(array)
}

void function(int array[][size]){
//Do thing....
}

上面的代码确实给了我一个错误(数组绑定(bind)不是整数常量)所以如果我将变量设为常量它将编译如下所示:

const int size = 10;
void function(int[][size]);

int main(){
int array[size][size];
function(array)
}

void function(int array[][size]){
//Do thing....
}

这确实像我说的那样编译,但现在我不能修改变量并且需要事先在代码中声明它的值。我假设该变量需要是全局变量,以便我可以在函数中使用它,话虽如此,我很可能无法获得工作指针,因为它是全局变量而不是局部变量。这是我尝试过但出现错误的示例(从“const int*”到“int*”的无效转换):

const int size = 10;
void function(int[][size]);

int main(){
int *other = &size;
*other = 5;
}

如有任何帮助,我们将不胜感激。

最佳答案

普通数组在 C++ 中不可调整大小。更令人沮丧的是,它们的大小必须是一个常量——您不能将大小设置为在运行时设置的变量。更令人沮丧的是,您放入作为函数参数的数组中的大小是一个约束,而且它甚至没有强制执行。这只是装饰。

正如评论中所暗示的那样,std::vector<TYPE>是 C++ 中首选的“可调整大小的数组”。您可以像这样创建一个 vector :

#include <vector>
int main() {
std::vector<int> my_int_array;
}

你可以像这样调整它的大小:

int new_size = 42;
my_int_array.resize(new_size);

并且您可以通过引用将它传递给一个函数(参见 & ),这样在函数内部对 myint_array 的更改会影响它在函数外部。

void my_awesome_function(std::vector<int>& int_array);

my_awesome_function(my_int_array);

假设您有一个二维矩阵,实现为 vector 的 vector :

std::vector<std::vector<int>> matrix = { { 1,2,3 }, { 4,5,6 } }

如果你想改变列数,你必须调整每一行数组的大小:

int new_column_count = 10;
for (auto& row : matrix) {
row.resize(new_column_count );
}

可以绕过matrix通过引用(例如 std::vector<std::vector<int>>& )并在需要时调整大小。

关于c++ - 我怎样才能拥有一个以二维数组作为参数的函数,而该数组有一个我想更改的参数/维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58776138/

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