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

发布于:2023-01-13 ⋅ 阅读:(231) ⋅ 点赞:(0)

问题描叙

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

输出:
结果

总结

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

本文含有隐藏内容,请 开通VIP 后查看