将二维数组作为函数参数传递
Passing a 2D array as Function Argument
我正在尝试将任意大小的二维数组传递给一个函数。我试过的代码如下:
#include <iostream>
void func(int (&arr)[5][6])
{
std::cout<<"func called"<<std::endl;
}
int main()
{
int arr[5][6];
func(arr);
return 0;
}
如您所见,func
被正确调用。但我想传递一个任意大小的二维数组。在当前示例中,我们只能传递 int [5][6]
.
PS:我知道我也可以使用 vector
但我想知道是否有办法用数组来做到这一点。例如,我应该可以写:
int arr2[10][15];
func(arr2);//this should work
您可以使用 模板 来完成此操作。特别是,使用 nontype template parameters 如下所示:
#include <iostream>
//make func a function template
template<std::size_t N, std::size_t M>
void func(int (&arr)[N][M])
{
std::cout<<"func called with: "<<N<<" rows and "<<M<<" columns"<<std::endl;
}
int main()
{
int arr2[10][15];
func(arr2);
return 0;
}
在上面的例子中,N
和 M
被称为非类型模板参数。
使用模板我们甚至可以让数组中元素的类型任意化,如下所示:
//make func a function template
template<typename T, std::size_t N, std::size_t M>
void func(T (&arr)[N][M])
{
std::cout<<"func called with: "<<N<<" rows and "<<M<<" columns"<<std::endl;
}
int main()
{
int arr2[10][15];
func(arr2);
float arr3[3][4];
func(arr3);//this works too
return 0;
}
我正在尝试将任意大小的二维数组传递给一个函数。我试过的代码如下:
#include <iostream>
void func(int (&arr)[5][6])
{
std::cout<<"func called"<<std::endl;
}
int main()
{
int arr[5][6];
func(arr);
return 0;
}
如您所见,func
被正确调用。但我想传递一个任意大小的二维数组。在当前示例中,我们只能传递 int [5][6]
.
PS:我知道我也可以使用 vector
但我想知道是否有办法用数组来做到这一点。例如,我应该可以写:
int arr2[10][15];
func(arr2);//this should work
您可以使用 模板 来完成此操作。特别是,使用 nontype template parameters 如下所示:
#include <iostream>
//make func a function template
template<std::size_t N, std::size_t M>
void func(int (&arr)[N][M])
{
std::cout<<"func called with: "<<N<<" rows and "<<M<<" columns"<<std::endl;
}
int main()
{
int arr2[10][15];
func(arr2);
return 0;
}
在上面的例子中,N
和 M
被称为非类型模板参数。
使用模板我们甚至可以让数组中元素的类型任意化,如下所示:
//make func a function template
template<typename T, std::size_t N, std::size_t M>
void func(T (&arr)[N][M])
{
std::cout<<"func called with: "<<N<<" rows and "<<M<<" columns"<<std::endl;
}
int main()
{
int arr2[10][15];
func(arr2);
float arr3[3][4];
func(arr3);//this works too
return 0;
}