带vector<T>的模板函数
Posted sanqima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带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);
效果如下:
以上是关于带vector<T>的模板函数的主要内容,如果未能解决你的问题,请参考以下文章
T::iterator 出错,其中模板参数 T 可能是 vector<int> 或 list<int>