真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【STL】模板概念+STL介紹-創(chuàng)新互聯(lián)

模板(Template)
  • 模板就是C++實(shí)現(xiàn)代碼重用機(jī)制的一種工具
  • 它可以實(shí)現(xiàn)類型參數(shù)化,即把類型定義為參數(shù), 從而實(shí)現(xiàn)了真正的代碼可重用性。
  • 可以使用模板來定義函數(shù)和類

當(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<(5)<還可以改寫成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ù)和算法的橋梁)

  • 容器(container):用來管理某類對象的集合,容器可以是array、vector、tree、hash map、set等;
  • 迭代器(iterator):用來在一個(gè)對象集合內(nèi)遍歷元素,這個(gè)對象集合或許是個(gè)容器,或許是容器的一部分。迭代器和尋常的指針類似,調(diào)用operator ++ 就累進(jìn),調(diào)用operator * 就訪問被指向的元素值,你可以把迭代器視作一種智能指針,能夠把”前進(jìn)至下一元素“的意圖轉(zhuǎn)換為合適的操作;
  • 算法(algorithm):用來處理集合內(nèi)的元素,它們可以出于不同的目的而插入、刪除、修改、查找、排序、使用元素,通過迭代器的協(xié)助,我們只需撰寫一次算法,就可以將它應(yīng)用于任意容器,因?yàn)樗腥萜鞯牡鞫继峁┮恢碌慕涌凇?/li>

下面是一個(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的理由
  1. 代碼重用,不需要重復(fù)造輪子
  2. 效率高(又快又節(jié)省資源)
  3. 準(zhǔn)確,避免寫出更多的 bug
  4. 代碼簡潔,可讀性高
  5. 即標(biāo)準(zhǔn)化又保證可用性

有關(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)查看詳情吧


網(wǎng)站名稱:【STL】模板概念+STL介紹-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/dedcdj.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部