作者:幾冬雪來
時(shí)間:2023年5月19日
內(nèi)容:C++模板 + string講解
目錄
前言:
1.模板:?
1.函數(shù)模板的隱/顯示實(shí)例化:?
2.類模板:
2.STL:?
1.? 什么是STL:?
2.STL六大組件:?
3.string類:?
結(jié)尾:?
前言:
在上一篇博客我們結(jié)束了動(dòng)態(tài)管理的講解,并且在最后的時(shí)候我們引出了下一個(gè)學(xué)習(xí)的知識(shí)板塊——模板。那么今天我們就大致的堆模板(初階)進(jìn)行講解吧。
1.模板:?
首先在進(jìn)一步介紹模板的時(shí)候,這里我們要知道一個(gè)知識(shí)。
在這里我們創(chuàng)建模板的時(shí)候我們可以用class去代替typname,但是不能用struct去替代typename。?
1.函數(shù)模板的隱/顯示實(shí)例化:?
在這里我們首先依靠模板來書寫一個(gè)兩個(gè)值相加的函數(shù)。?
在這里我們的a1和a2都是整形,d1和d2都是浮點(diǎn)型,我們都可以對(duì)其進(jìn)行相加。
但是在這里就出現(xiàn)了一個(gè)問題。?
如果在這里,參數(shù)是一個(gè)浮點(diǎn)型和一個(gè)整形的話,我們的單個(gè)T無法確定類型。
因此代碼會(huì)報(bào)錯(cuò)。?
這里的一種方法就是強(qiáng)制類型轉(zhuǎn)換。
在上面我們都是實(shí)參傳遞的類型,推演T的類型。
另外一種方法就是我們的顯示實(shí)例化。
在這里就是我們的顯示實(shí)例化。?
顯示實(shí)例化,它是用指定的類型實(shí)例化。
在上面的顯示實(shí)例化的代碼中,我們的d2發(fā)生了隱式類型裝換。
都是我們的顯示實(shí)例化并不是用于上面的兩個(gè)數(shù)相加求值的代碼中。
而是更多用于我們下面這種無法判斷T類型的代碼中。?
2.類模板:
在講解完了我們的函數(shù)模板之后,接下來我們就來開始講解類模板了。
簡(jiǎn)單的用我們的用棧來舉例。
如果我們?cè)谶@里想要一個(gè)棧存int,一個(gè)存double。
那么相對(duì)于的我們就要?jiǎng)?chuàng)建出這兩個(gè)類型相對(duì)于的類,因?yàn)橹粚懸粋€(gè)的話我們的類型是寫死的。
可是這樣子有過于麻煩了,每多出一個(gè)類型我們就要多創(chuàng)建一個(gè)類型的棧進(jìn)行存儲(chǔ)。
并且如果某個(gè)類發(fā)生問題的話,我們每個(gè)都要進(jìn)行修改。
因此在這里我們就用到了類的模板。
?
通過以上這種代碼,我們就可以成功的創(chuàng)建出不同類型的函數(shù)。
并且也不用對(duì)其失敗進(jìn)行判斷。
又因?yàn)?span style="color:#fe2c24;">類模板無法推演實(shí)例化。
因此在這里我們就要用到顯示實(shí)例化。?
同樣的我們的類模板的聲明和定義可以分開進(jìn)行書寫,但是這里并不推薦,因?yàn)橄裎覀兤匠D菢臃珠_書寫的話會(huì)出現(xiàn)問題。
因此到后面我們學(xué)習(xí)到更深的地方的時(shí)候我們?cè)賮韺W(xué)習(xí)。?
在這里每寫一個(gè)不同函數(shù),要建立一個(gè)類模板。?
2.STL:?
那么在大概的講解了初階模板之后,接下來我們就要開始講STL了。
1.? 什么是STL:?
2.STL六大組件:?
3.string類:?
在我們的C語言中我們就存在了string。
同樣的在C++中也存在著string,只不過二者的用法稍有不同。
在這里我們將C++中的string的用法叫做。
string類。
那么接下來我們就簡(jiǎn)單的介紹一下我們的string類要怎么樣書寫吧。?
這里就是我們string的簡(jiǎn)單用法。?
其次,我們的string類也支持多個(gè)參數(shù)的輸入。?
?
同時(shí)我們也可以用我們的string類來copy我們字符串的一部分長度。?
?
就類似這個(gè)樣子我們可以借助string類來copy我們一部分字符串的長度。
s3是我們的被copy的函數(shù),6是下標(biāo)為6的位置,5是copy的數(shù)量。?
在這里我們不能不寫5,如果不寫5的話,這里我們的代碼也是會(huì)崩潰的。
這個(gè)地方也可以直接比較字符串的大小。
像這里我們就比較了兩個(gè)字符串的大小。
不過因?yàn)閮?yōu)先級(jí)的緣故,我們需要對(duì)兩個(gè)比較的值加上括號(hào),不然會(huì)報(bào)錯(cuò)。?
?
同樣的我們的string類也可以這樣書寫。
不過這樣寫的效率不好,不建議這樣使用。?
?
同樣的之前我們又說過,string類可以實(shí)現(xiàn)增刪查改。
這里就是我們實(shí)現(xiàn)增刪查改的代碼。
不過相比起這樣書寫增刪查改,我們還要更加便利的方法。?
?
這樣子書寫依舊可以完成我們的增。
它的本質(zhì)還是尾插,只不過它在string類中重載了operator+=,然后我們?nèi)ミM(jìn)行調(diào)用。
接下來還有一個(gè)問題。
?在這里我們要求把一個(gè)變量轉(zhuǎn)為string對(duì)象的話要怎么書寫。
在這里我們就可以這樣進(jìn)行實(shí)現(xiàn)。?
不過這個(gè)代碼還有一些要改進(jìn)的地方,下一篇博客我們?cè)賮砑?xì)說。文章來源:http://www.zghlxwxcb.cn/news/detail-451605.html
結(jié)尾:?
在這里我們的模板初階就這樣的科普完畢了,接下來我們就要講解C++中的核心內(nèi)容STL了。大家一定要在學(xué)好新知識(shí)的過程中鞏固舊知識(shí),這樣才能有所提升。最后希望這篇博客能帶來幫助。文章來源地址http://www.zghlxwxcb.cn/news/detail-451605.html
到了這里,關(guān)于C++——模板(初階) + string的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!