當(dāng)你定義一個(gè)如下函數(shù),想要計(jì)算一個(gè)數(shù)的平方
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供饒陽網(wǎng)站建設(shè)、饒陽做網(wǎng)站、饒陽網(wǎng)站設(shè)計(jì)、饒陽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、饒陽企業(yè)網(wǎng)站模板建站服務(wù),10余年饒陽做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。int square(int x){return x*x;
}
可你想要函數(shù)也能對double類型的數(shù)進(jìn)行平方,于是接著寫
double square(double x){return x*x;
}
基于C++的函數(shù)重載,你如愿完成了這個(gè)功能
int main(){cout<
是不是覺得寫了兩個(gè)功能一模一樣的函數(shù),只是改變了形參類型,有點(diǎn)蠢?那讓我們來看Template是怎么做的
template//函數(shù)模板
T square(T x){return x*x;
}
int main(){cout<(5)<(5.5)<
是不是很神奇?函數(shù)模板在這里僅僅是聲明了一個(gè)求平方函數(shù)的描寫敘述,還不是一個(gè)能夠直接運(yùn)行的函數(shù)。只有用實(shí)參的數(shù)據(jù)類型取代類型參數(shù)標(biāo)識符T之后(實(shí)例化),才會產(chǎn)生真正的函數(shù)。同時(shí)函數(shù)模板在調(diào)用時(shí)能夠自動(dòng)鑒別實(shí)參的數(shù)據(jù)類型(隱式實(shí)例化),因此上方主函數(shù)里的cout<
cout<
下面再通過一個(gè)例子介紹類模板
template//類模板,也可定義為templateclass iVector{T arr[1000];
int size;
public:
BoVector():size(0){}
void push(T x){ arr[size]=x;size++;
}
void print() const { for(int i=0;i cout<
與函數(shù)模板類似,類模板不是一個(gè)類,而是一個(gè)模板,只有實(shí)例化后才會成為一個(gè)類,因此類模板需要這樣來使用
int main(){//類模板必須要指明數(shù)據(jù)格式(實(shí)例化),即 iVectoriv,這一點(diǎn)與函數(shù)模板不同
iVectoriv;
iv.push(2);
iv.push(5);
iv.push(8);
iv.push(9);
iv.print();
return 0;
}
最后我們將函數(shù)模板和類模板結(jié)合起來使用,感受模板帶來的便捷與效率
#includeusing namespace std;
template//函數(shù)模板
T square(T x){return x*x;
}
template//類模板
class iVector{T arr[1000];
int size;
public:
iVector():size(0){
}
void push(T x){ arr[size]=x;size++;
}
T get(int i) const { return arr[i];
}
int getsize()const{ return size;
}
void print() const { for(int i=0;i cout<iVectoroperator*(const iVector& rhs1,iVector& rhs2){//類模板的運(yùn)算符重載
iVectorres;
for(int i=0;ires.push(rhs1.get(i)*rhs2.get(i));
}
return res;
}
int main(){iVectoriv;
iv.push(2);
iv.push(5);
iv.push(8);
iv.push(9);
cout<<"Print squared iv:"<
標(biāo)準(zhǔn)模板類STL(C++ Standard Template Library)介紹STL(Standard Template Library,標(biāo)準(zhǔn)模板類)是C++語言內(nèi)置的一個(gè)基礎(chǔ)模板集合,包含了各種常用的存儲數(shù)據(jù)的模板類及相應(yīng)的操作函數(shù),你可以將STL理解為STL= Containers(存儲數(shù)據(jù)的容器)+Algorithms(處理數(shù)據(jù)的算法)+Iterators(數(shù)據(jù)和算法的橋梁)
下面是一個(gè)調(diào)用STL的小栗子
#include#include#include
using namespace std;
int main()
{//container為vector
vectorvec;
//algorithm為push_back(從尾部添加元素)
vec.push_back(4);
vec.push_back(1);
vec.push_back(8);
//iterator為itr1,itr2,i
vector::iterator itr1=vec.begin();//[begin,end)
vector::iterator itr2=vec.end();
for(vector::iterator i=itr1;i!=itr2;++i){cout<<*i<<" ";
}
cout<::iterator i=itr1;i!=itr2;++i){cout<<*i<<" ";
}
return 0;
}
使用STL的理由有關(guān)STL的詳細(xì)用法及介紹我會在后面的文章中持續(xù)更新,歡迎關(guān)注!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧