在 C++ 中使用模板传递 2 个不同大小的数组
passing 2 arrays of different sizes using templates in C++
我有以下代码
template <size_t size_x, size_t size_y>
void product(int (&arr)[size_x][size_y],int (&arr1)[size_x][size_y])
{
for (int i=0;i<size_x;i++)
for (int j=0;j<size_y;j++)
{
cout << "The size of a1[][] is" << arr[i][j] << endl;
}
for (int i=0;i<size_x;i++)
for (int j=0;j<size_y;j++)
{
cout << "The size of a1[][] is" << arr1[i][j] << endl;
}
}
int main()
{
int A[2][2] = { { 1, 2 }, { 3, 4 }};
int B[2][2] = { { 0, 5}, { 6, 7 } };
product(A,B);
return 0;
}
我正在尝试将数组传递给函数。但是,如果数组的维度相同,则此程序可以正常工作。我想传递不同维度的数组。如何将 22 和 32 数组传递给函数?
How can I pass an array of 22 and 32 array to a function?
只需提供额外的模板参数即可完成此操作
template <size_t size_x1, size_t size_y1, size_t size_x2, size_t size_y2>
void product(int (&arr)[size_x1][size_y1],int (&arr1)[size_x2][size_y2]);
从 C++20 开始,您可以使用 auto
作为函数参数的类型:
void product(auto &arr, auto &arr1)
您可以获得第一个索引 std::size(arr)
和第二个索引 std::size(*arr)
的数组大小。
完整的程序:
#include <iostream>
using namespace std;
void product(auto &arr, auto &arr1)
{
for (const auto &inner: arr)
for (const auto &elem: inner)
{
cout << "arr[][] is " << elem << endl;
}
for (const auto &inner: arr1)
for (const auto &elem: inner)
{
cout << "arr1[][] is " << elem << endl;
}
cout << "size of arr " << size(arr) << " * " << size(*arr) << endl;
cout << "size of arr " << size(arr1) << " * " << size(*arr1) << endl;
}
int main()
{
int A[2][2] = { { 1, 2 }, { 3, 4 }};
int B[3][1] = { { 0}, { 6 }, {3} };
product(A,B);
return 0;
}
我有以下代码
template <size_t size_x, size_t size_y>
void product(int (&arr)[size_x][size_y],int (&arr1)[size_x][size_y])
{
for (int i=0;i<size_x;i++)
for (int j=0;j<size_y;j++)
{
cout << "The size of a1[][] is" << arr[i][j] << endl;
}
for (int i=0;i<size_x;i++)
for (int j=0;j<size_y;j++)
{
cout << "The size of a1[][] is" << arr1[i][j] << endl;
}
}
int main()
{
int A[2][2] = { { 1, 2 }, { 3, 4 }};
int B[2][2] = { { 0, 5}, { 6, 7 } };
product(A,B);
return 0;
}
我正在尝试将数组传递给函数。但是,如果数组的维度相同,则此程序可以正常工作。我想传递不同维度的数组。如何将 22 和 32 数组传递给函数?
How can I pass an array of 22 and 32 array to a function?
只需提供额外的模板参数即可完成此操作
template <size_t size_x1, size_t size_y1, size_t size_x2, size_t size_y2>
void product(int (&arr)[size_x1][size_y1],int (&arr1)[size_x2][size_y2]);
从 C++20 开始,您可以使用 auto
作为函数参数的类型:
void product(auto &arr, auto &arr1)
您可以获得第一个索引 std::size(arr)
和第二个索引 std::size(*arr)
的数组大小。
完整的程序:
#include <iostream>
using namespace std;
void product(auto &arr, auto &arr1)
{
for (const auto &inner: arr)
for (const auto &elem: inner)
{
cout << "arr[][] is " << elem << endl;
}
for (const auto &inner: arr1)
for (const auto &elem: inner)
{
cout << "arr1[][] is " << elem << endl;
}
cout << "size of arr " << size(arr) << " * " << size(*arr) << endl;
cout << "size of arr " << size(arr1) << " * " << size(*arr1) << endl;
}
int main()
{
int A[2][2] = { { 1, 2 }, { 3, 4 }};
int B[3][1] = { { 0}, { 6 }, {3} };
product(A,B);
return 0;
}