带vector<T>的模板函数

    若两个函数的逻辑相同,但参数类型不同,则可以把这2个函数合并为一个模板函数,有利于精简代码和提高可读性。
    比如,

  • 函数A: 将CString的三个动态数组:vector<CString> left,mid,right合并为一个;
  • 函数B: 将double的三个动态数组:vector<double> left,mid,right合并为一个;

    函数A、B的功能都是合并3个vector,只有函数参数不同,则可以用模板函数来代替原始的A、B,代码更加简洁,具体如下:

1 原始函数

1.1 将3个CString类型的vector<>合并

void MergeData(vector<CString>& data,const vector<CString>& left, const vector<CString>& mid, const vector<CString>& right)
{
	data.insert(data.end(), left.begin(),  left.end());
	data.insert(data.end(), mid.begin(),   mid.end());
	data.insert(data.end(), right.begin(), right.end());
}

1.2 将3个double类型的vector<>合并

void MergeData(vector <double>& data, const vector<double>& left, const vector<double>& mid, const vector<double>& right)
{
	data.insert(data.end(), left.begin(),  left.end());
	data.insert(data.end(), mid.begin(),   mid.end());
	data.insert(data.end(), right.begin(), right.end());
}

2 升级为模板函数

template <typename T>
inline void MergeData(vector<T>& data, const vector<T>& left, const vector<T>& mid, const vector<T>& right)
{
	data.insert(data.end(), left.begin(),  left.end());
	data.insert(data.end(), mid.begin(),   mid.end());
	data.insert(data.end(), right.begin(), right.end());
}

3 测试方法

//test.cpp

//模板函数
template <typename T>
inline void MergeData(vector<T>& data, const vector<T>& left, const vector<T>& mid, const vector<T>& right)
{
	data.insert(data.end(), left.begin(),  left.end());
	data.insert(data.end(), mid.begin(),   mid.end());
	data.insert(data.end(), right.begin(), right.end());
}

//测试函数
void TestMerge1()
{
	//1)字符串
	vector<CString> data;
	vector<CString> left  = { _T("dx1"),_T("dy1"),_T("dz1") };
	vector<CString> mid   = { _T("dx2"),_T("dy2"),_T("dz2") };
	vector<CString> right = { _T("dx3"),_T("dy3"),_T("dz3") };
	MergeData(data, left, mid, right);
	CString strLine;
	for (int i = 0; i < (int)data.size(); i++)
	{
		strLine += data[i] + _T(" ");
		if (i == data.size() - 1)
		{
			strLine += _T("\r\n");
			OutputDebugString(strLine);
		}
	}

	//2)数据
	vector<double> data2;
	vector<double> left2  = { 110,120,130 };
	vector<double> mid2   = { 310,320,330 };
	vector<double> right2 = { 510,520,530 };
	MergeData(data2, left2, mid2, right2);
	CString strRow;
	for (int i = 0; i < (int)data2.size(); i++)
	{
		CString strItem;
		strItem.Format(_T("%.2lf"), data2[i]);
		strRow += strItem + _T(" ");
		if (i == data2.size() - 1)
		{
			strRow += _T("\r\n");
			OutputDebugString(strRow);
		}
	}
}

    效果如下:

图(1) 模板函数合并3个动态数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanqima

一键三连,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值