最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++深入了解模板的使用

 更新時(shí)間:2022年06月23日 11:39:56   作者:beyond.myself  
這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一.泛型編程

泛型編程:不再是針對(duì)某種類型,能適應(yīng)廣泛的類型,跟具體的類型無(wú)關(guān)的代碼

如何實(shí)現(xiàn)一個(gè)通用的交換函數(shù)呢?

void Swap(int& left, int& right)
{
	int temp = left;
	left = right;
	right = temp;
}
void Swap(double& left, double& right)
{
	double temp = left;
	left = right;
	right = temp;
}

使用函數(shù)重載雖然可以實(shí)現(xiàn),但是有一下幾個(gè)不好的地方: 1. 重載的函數(shù)僅僅是類型不同,代碼復(fù)用率比較低,只要有新類型出現(xiàn)時(shí),就需要用戶自己增 加對(duì)應(yīng)的函數(shù) 2. 代碼的可維護(hù)性比較低,一個(gè)出錯(cuò)可能所有的重載均出錯(cuò)

因此我們需要告訴編譯器一個(gè)模子,讓編譯器根據(jù)不同的類型利用該模子來(lái)生成代碼

二.函數(shù)模板

模板分為:函數(shù)模板,類模板

1.函數(shù)模板概念

函數(shù)模板代表了一個(gè)函數(shù)家族,該函數(shù)模板與類型無(wú)關(guān),在使用時(shí)被參數(shù)化,根據(jù)實(shí)參類型產(chǎn)生 函數(shù)的特定類型版本。

2.函數(shù)模板格式

template<typename T>

返回值類型 函數(shù)名(參數(shù)列表){}

說(shuō)明:

1.template<class T> 和 template<typename T>在此暫時(shí)認(rèn)為一樣,template<struct T>是 錯(cuò)誤的 ,沒(méi)有這種寫法

2.T是type的縮寫,T不一定寫T,可以寫任意字母,比如X,t ……但是習(xí)慣寫為T

舉例:

template<typename T>    //或template<class T>
void Swap(T& left, T& right)
{
	T tmp = left;
	left = right;
	right = tmp;
}
int main()
{
	int a = 0, b = 1;
	double c = 2.2, d = 3.3;
	swap(a, b);
	swap(c, d);
	return 0;
}

swap(a, b);swap(c, d); 調(diào)用的是同一個(gè)函數(shù)嗎?

答:不是同一個(gè)。底層匯編可以看出不是同一個(gè),如果調(diào)試時(shí)發(fā)現(xiàn)走的是同一個(gè)函數(shù),其實(shí)是編譯器的優(yōu)化導(dǎo)致。

實(shí)際上以后swap函數(shù)都不用自己寫了,庫(kù)中有模板,直接用就行

3.函數(shù)模板的原理

在編譯器編譯階段 ,對(duì)于模板函數(shù)的使用, 編譯器需要根據(jù)傳入的實(shí)參類型來(lái)推演生成對(duì)應(yīng)類型 的函數(shù) 以供調(diào)用。比如: 當(dāng)用 double 類型使用函數(shù)模板時(shí),編譯器通過(guò)對(duì)實(shí)參類型的推演,將 T 確定為 double 類型,然后產(chǎn)生一份專門處理 double 類型的代碼 ,對(duì)于字符類型也是如此。 模板的實(shí)例化:

三.類模板

類模板的定義格式

template < class T1 , class T2 , ..., class Tn >

class 類模板名

{

// 類內(nèi)成員定義

};

舉例:調(diào)用 Stack<int> st1; 時(shí),用int替換模板中的T。調(diào)用 Stack<double> st1; 時(shí),用double替換模板中的T

// 類模板
template<class T>
class Stack
{
public:
	Stack(int capacity = 0)
	{
		_a = new T[capacity];
		_capacity = capacity;
		_top = 0;
	}
	~Stack()
	{
		cout << "~Stack()" << endl;
		delete[] _a;
		_capacity = 0;
		_top = 0;
	}
	void Push(const T& x)
	{}
private:
	T* _a;
	int _top;
	int _capacity;
};
int main()
{
	Stack<int> st1; // int
	st1.Push(1);
	Stack<double> st2; // double
	st2.Push(2.2);
	return 0;
}

到此這篇關(guān)于C++深入了解模板的使用的文章就介紹到這了,更多相關(guān)C++模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++利用篩選法算素?cái)?shù)的方法示例

    C/C++利用篩選法算素?cái)?shù)的方法示例

    這篇文章主要給大家介紹了關(guān)于利用C/C++篩選法算素?cái)?shù)的相關(guān)資料,文中給大家列舉了普通枚舉法和篩選法兩種方法實(shí)現(xiàn)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • C++數(shù)據(jù)結(jié)構(gòu)之堆詳解

    C++數(shù)據(jù)結(jié)構(gòu)之堆詳解

    本文詳細(xì)講解了C++數(shù)據(jù)結(jié)構(gòu)之堆,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 淺談C++中virtual的三種用法

    淺談C++中virtual的三種用法

    這篇文章主要介紹了淺談C++中virtual的三種用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C語(yǔ)言實(shí)現(xiàn)掃雷小游戲簡(jiǎn)單版

    C語(yǔ)言實(shí)現(xiàn)掃雷小游戲簡(jiǎn)單版

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小游戲簡(jiǎn)單版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語(yǔ)言驅(qū)動(dòng)開(kāi)發(fā)之通過(guò)ReadFile與內(nèi)核層通信

    C語(yǔ)言驅(qū)動(dòng)開(kāi)發(fā)之通過(guò)ReadFile與內(nèi)核層通信

    驅(qū)動(dòng)與應(yīng)用程序的通信是非常有必要的,內(nèi)核中執(zhí)行代碼后需要將其動(dòng)態(tài)顯示給應(yīng)用層。為了實(shí)現(xiàn)內(nèi)核與應(yīng)用層數(shù)據(jù)交互則必須有通信的方法,微軟為我們提供了三種通信方式,本文先來(lái)介紹通過(guò)ReadFile系列函數(shù)實(shí)現(xiàn)的通信模式
    2022-09-09
  • C/C++的文件IO函數(shù)你知道嗎

    C/C++的文件IO函數(shù)你知道嗎

    這篇文章主要為大家詳細(xì)介紹了C/C++的文件IO函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++寬字符與普通字符的轉(zhuǎn)換實(shí)例詳解

    C++寬字符與普通字符的轉(zhuǎn)換實(shí)例詳解

    這篇文章主要介紹了C++寬字符與普通字符的轉(zhuǎn)換實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++ inline內(nèi)聯(lián)函數(shù)詳解

    C++ inline內(nèi)聯(lián)函數(shù)詳解

    這篇文章主要介紹了C++ inline內(nèi)聯(lián)函數(shù)詳解,有感興趣的同學(xué)可以借鑒參考下
    2021-02-02
  • C++大數(shù)模板(推薦)

    C++大數(shù)模板(推薦)

    本篇文章是對(duì)C++大數(shù)模板的程序代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++紅黑樹(shù)的底層實(shí)現(xiàn)機(jī)制詳解

    C++紅黑樹(shù)的底層實(shí)現(xiàn)機(jī)制詳解

    紅黑樹(shù)與AVL樹(shù)一樣,也是一種自平衡的二叉搜索樹(shù),它在每個(gè)結(jié)點(diǎn)上增加一個(gè)存儲(chǔ)位表示結(jié)點(diǎn)的顏色,可以是Red或Black,通過(guò)對(duì)任何一條從根到葉子的路徑上各個(gè)結(jié)點(diǎn)著色方式的限制,本文介紹了C++紅黑樹(shù)的底層實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

宁城县| 郯城县| 呼伦贝尔市| 长沙县| 敦煌市| 孟州市| 绥滨县| 湘潭县| 东至县| 马鞍山市| 舞钢市| 会同县| 张北县| 交口县| 防城港市| 滦平县| 吉林省| 玉田县| 广水市| 嫩江县| 桂平市| 井陉县| 肇庆市| 兴仁县| 浮山县| 义乌市| 怀化市| 汤原县| 拜泉县| 宜兴市| 温州市| 南陵县| 金门县| 阿克| 沙湾县| 泾源县| 开阳县| 大新县| 桦川县| 剑阁县| 綦江县|