c++ - 在修改 C++ 时将数组传递给递归函数
问题描述
我有一个递归函数,它将二维数组作为 C++ 中的参数。这个二维数组的内容在这个函数的所有递归调用中是唯一的。
我想在每次进行递归调用之前修改这个数组。如何在不修改两个递归调用的数组的情况下执行此操作,仅针对当前调用?
这是我想要完成的事情:
void foo(int a[10][10]) {
// imagine base case above
// modify array, i.e. set a[2][2] to '5'
foo(a);
// modify array i.e. set a[2][2] to '3'
foo(a);
}
我尝试了以下方法,导致编译器错误:
void foo(int a[10][10]) {
// imagine base case above
foo(a[2][2] = 5);
foo(a[2][2] = 3);
}
这个想法是我希望数组在递归调用中是独立的,例如,我不希望该集合a[2][2] = 5
应用于下一个递归调用。从某种意义上说,我希望在应用下一个修改(更改)之前“还原”该数组修改。
int
如果我只是将 an作为参数传递,这很容易实现。例如,我可以这样做:
void foo(int a) {
// imagine base case above
// increase a by 1
foo(a + 1);
// decrease a by 4
foo(a - 4);
}
您可以在这里看到在不影响以下递归调用的情况下进行修改是多么容易。
我的问题是如何使用array进行相同的更改。
解决方案
C-array 不能被复制,std::array
可以:) 所以我会使用std::array
.
a[2][2] = 5
改变数组,而i - 4
不会改变整数i
(因此在这种情况下没有什么可丢弃的,与 相反f(i -= 4)
)。
数组上没有允许轻松定制的运算符,我们可以为此创建函数或 lambda:
// pass by value
std::array<std::array<int, 10>, 10>
mutated(std::array<std::array<int, 10>, 10> a, int x, int y, int value)
{
a[x][y] = value;
return a;
}
void foo(const std::array<std::array<int, 10>, 10>& a) {
// imagine base case above
// "modify" array, i.e. set a[2][2] to '5'
foo(mutated(a, 2, 2, 5));
// "modify" array i.e. set a[2][2] to '3'
foo(mutated(a, 2, 2, 3));
}
推荐阅读
- python - ValueError 在多维函数上使用 scipy.optimize
- spring-batch - 通过 API 批量导入 (SOAP/REST)
- ansible - Ansible 多供应商、多地点和多类型库存的好例子
- angular - 如何在 Angular 模态库中获取包含图像的数组
- javascript - 在 Django 应用程序中包含 python 控制台以与数据集交互
- c# - json_serializer.DeserializeObject,即时窗口,VS2017
- splunk - 如何在 splunk 中制作仪表板和查询
- java - K 表示 - 将 X 和 Y 添加到列表中
- google-sheets - Google 表格的 SUMIF/总数组公式 - 仅显示具有值的行的总计
- docker - 了解 Docker 网络隔离