可变参数模板拼接未知个数的数组

问题描叙

实现一个函数,输入参数是多个数组
将多个二维数组进行拼接,但是你不知道你有多少个二维数组。
数组行数不同,列数相同。后面数组直接拼接到前面的数组之后。
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;
}

输出:
结果

总结

该列子的可变参数模板的实际思想就是递归,逐一拼接。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值