gpt4 book ai didi

c++ - 在递归函数中使用二维数组作为参数

转载 作者:行者123 更新时间:2023-11-28 02:27:39 24 4
gpt4 key购买 nike

我正在尝试以二维数组作为参数递归调用函数。

我的编译错误是

knapsack.cpp:76:55: error: cannot convert ‘int (*)[(((sizetype)(((ssizetype)(knapsack_capacity + 1)) + -1)) + 1)]’ to ‘int**’ for argument ‘1’ to ‘void backtrack(int**, int, int, std::vector)’ backtrack(T, items_amount, knapsack_capacity, weights);

我的函数声明如下:

void backtrack (int **T, int item, int weight, vector<int> weights)
{
if (T[item][weight] == T[item-1][weight]) {
cout << item << ", ";
backtrack(T, item-1, weight-weights[item-1], weights);
}
else if (item <= 0 && weight <= 0) {
// Dont do anything
}
else {
backtrack(T, item-1, weight, weights);
}
}

被这样调用:

backtrack(T, items_amount, knapsack_capacity, weights);

我试过一百万种不同的方法来组合 []*,但没有成功。有什么想法吗?

最佳答案

您可能正在传递一个数组,例如 int arr[10][20];到你的功能。这样的数组不会衰减到 int** , 但到 int (*)[20] (即指向 20 整数数组的指针)。因此,要么更改函数签名以便指定第二个维度,要么不传递数组 int[10][20] , 传递一个指向指针的指针 int** (你必须为此分配内存等)。使用这两种方法的示例:

#include <cstddef>

void f(int (*arr)[20]){}
void g(int**){}

int main()
{
// using a pointer to array-of-20-ints
int arr[10][20];
f(arr);

// 10 x 20 dynamic array, allocate
int** ptr = new int*[10]; // allocate memory for the pointers to rows
for(std::size_t i = 0; i < 10; ++i)
ptr[i] = new int[20]; // allocate each row

// process
g(ptr);

// deallocate
for(std::size_t i = 0; i < 10; ++i)
delete[] ptr[i]; // delete each row
delete[] ptr; // delete the memory allocated for the pointers to the rows
}

但是,实际上,您应该使用 std::vector<std::vector<int>>相反。

关于c++ - 在递归函数中使用二维数组作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29996623/

24 4 0
文章推荐: c++ - 方法之间的goto语句C++
文章推荐: javascript - 包含每个选项内容的下拉列表(