- 此问题在此处已有答案**:
Passing an array by reference(5个答案)
Passing a 2D array to a C++ function(16个答案)
C++ pass an array by reference(7个答案)
2天前关闭。
你好,我想找到一种方法来取代汽车关键字在下面的代码。
#include <iostream>
using namespace std;
void printMatrix(const auto & matrix) {
/* print matrix using range-based for */
}
int main() {
int matrix[][3] = {{}, {}, {}};
int matrix2[][6] = {{}, {}, {}};
printMatrix(matrix);
printMatrix(matrix2);
return 0;
}
我应该用什么来替换常量自动&矩阵中的自动。我可以使用指针,但问题是我必须传递行和列的大小。上面的代码是工作的,但我想知道如何自动关键字处理这一点。
4条答案
按热度按时间wi3ka0sx1#
此函数声明
声明一个模板函数。
你可以这样写
并且该函数作为前一个函数被调用
因为数组的元素类型是已知的,所以你也可以写
在函数中,您可以在嵌套的for循环中使用值
M
和N
来输出数组,例如或者可以使用基于范围的for循环
你也可以使用初始化函数来完成同样的工作,例如
这是一个演示程序。
程序输出为
aurhwmvo2#
对于参数化元素类型,重新声明print函数,以便仅允许作为2D数组的函数参数通过引用:
与使用单个类型模板参数的重载(如OP的示例中,通过具有单个发明类型模板参数的
auto
/缩写函数模板)相比,这本质上是一个更专业化的版本。arknldoa3#
一个好的替代品可以是一个概念。
从here开始:
所以
这样,在代码中示出了仅期望包含可迭代对象(例如2D数组)的可迭代对象(概念范围),并且对于错误的参数将给出合理的错误消息。
Live example有足够多的包含。
xqkwcwgp4#
你可以用模板参数替换
auto
,这是C++14之前的做法。