问题描叙
实现一个函数,输入参数是多个数组
将多个二维数组进行拼接,但是你不知道你有多少个二维数组。
数组行数不同,列数相同。后面数组直接拼接到前面的数组之后。
eg:四个数组拼成一个数组
[2* 3]+[3* 3]+[4* 3]+[1* 3] ==> [10* 3]
解决办法
由于数组的个数不确定,所以要采取可变参数模板的方式,包括但不限于这种方式。
详细代码
vector<vector<int>> dum(vector<vector<int>> ls, vector<vector<int>> rs)
{
int n = 0;
/*将前面的数组放到新的数组中*/
vector<vector<int>> sum(ls.size() + rs.size(), vector<int>(rs[0].size(), 0));
for (int i = 0; i < ls.size(); ++i)
{
for (int j = 0; j < sum[0].size(); ++j)
{
sum[i][j] = ls[i][j];
}
}
/*将后面的数组拼接到前面的数组之后*/
for (int i = ls.size(); i < sum.size(); ++i)
{
for (int j = 0; j < sum[0].size(); ++j)
{
sum[i][j] = rs[n][j];
if (j == sum[0].size() - 1)
++n;
}
}
return sum;
}
/*普通模板*/
template<class T>
vector<vector<int>> func(T ls, T rs)
{
vector<vector<int>> sum = dum(ls, rs);
return sum;
}
/*可变参数模板*/
template<class T, class...Ts>
vector<vector<int>> func(T ls, Ts...rs)
{
vector<vector<int>> result = func(rs...);
vector<vector<int>> sum = dum(ls, result);
return sum;
}
int main()
{
vector<vector<int>> a{ {1,2,3},{4,5,6} };
vector<vector<int>> b{ {1,2,3},{4,5,6},{7,8,9} };
vector<vector<int>> c{ {10,11,12},{13,14,15},{16,17,18},{19,20,21} };
vector<vector<int>> d{ {22,23,24} };
vector<vector<int>> reuslt = func(a, b,c ,d);
for (int i = 0; i < reuslt.size(); ++i)
{
for (int j = 0; j < reuslt[0].size(); ++j)
{
cout << reuslt[i][j] << " ";
if (j == reuslt[0].size() - 1)
cout << endl;
}
}
std::cout << "test demo" << std::endl;
return 0;
}
输出:
总结
该列子的可变参数模板的实际思想就是递归,逐一拼接。