STL提供六大組件,它們之間可以彼此套用,如下圖所示:
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到合陽(yáng)網(wǎng)站設(shè)計(jì)與合陽(yáng)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋合陽(yáng)地區(qū)。通過(guò)下面簡(jiǎn)單的程序,展示了六大組件的使用,具體內(nèi)容如下:
#include#include
#include#includeusing namespace std;
int main()
{
??? int ia[6] = {27, 210, 12, 47, 109, 83};
??? vector>vi(ia, ia+6);
??? // bind2nd(less(), 40): 元素小于40的值
??? cout<< count_if(vi.begin(), vi.end(),
??????????? ????????not1(bind2nd(less(), 40)))<< endl;??????? // 4
??? return 0;
}
2. 令人困惑的C++語(yǔ)法在STL中,有些日常開(kāi)發(fā)過(guò)程中不常見(jiàn)、令人困惑的C++語(yǔ)法,如template 特化和偏特化、臨時(shí)對(duì)象或者function call操作符等等。
2.1 迭代器的前閉后開(kāi)區(qū)間表示法一對(duì)迭代器標(biāo)示的區(qū)間是一個(gè)前閉后開(kāi)的區(qū)間,也即[fisrst, last),整個(gè)實(shí)際范圍從first開(kāi)始,知道last-1結(jié)束。迭代器last所指的是“最后一個(gè)元素的下一位置“。
2.2 臨時(shí)對(duì)象的產(chǎn)生和使用臨時(shí)對(duì)象,也稱無(wú)名對(duì)象(unnamed objects),通過(guò)在template類名稱之間直接加上一個(gè)小括號(hào),并可指定初值,其意義相當(dāng)于調(diào)用相應(yīng)的構(gòu)造函數(shù)constructor,且不指定對(duì)象名稱。
templateclass print
{
private:
??? T text;
public:
??? print() {};
??? print(T elem) : text(elem) {};
??? void operator() ()
??? {
??????? cout<< text<< endl;
??? }
};
int main()
{
??? printobj1 ;???
??? obj1();????
??? printobj2(10);
??? obj2();
??? // unnamed objects
??? print() ();???? // 前一個(gè)()是用來(lái)得到臨時(shí)對(duì)象, 后一個(gè)()是用來(lái)調(diào)用operator()操作
??? print(20) ();
? ??return 0;
}
2.3 template類的特化和偏特化template特化指的是模板參數(shù)在特定類型下的具體實(shí)現(xiàn),即將模型中的參數(shù)類型轉(zhuǎn)換為特定(具體)的參數(shù)類型。
偏特化(partial specialization)是模板特化的一種特殊形式。一般來(lái)說(shuō),特征也稱他為全特化,即將所有的模板參數(shù)替換為具體參數(shù)類型,而偏特化是將部分參數(shù)類型轉(zhuǎn)換為特定類型。
3. 容器的結(jié)構(gòu)3.1 序列式容器序列式容器指的是,以線性排列方式(內(nèi)存地址連續(xù))來(lái)存儲(chǔ)某一特定類型的數(shù)據(jù),包括array、vector、list、forward_list和deque五種。
array如下圖所示,array容器的大小,在容器創(chuàng)建之后是固定不變的,即不能增加或者刪除元素,只能修改元素值。
特性如下:
vectorvector容器是一個(gè)長(zhǎng)度可變的容器,即在存儲(chǔ)空間不足時(shí),會(huì)通過(guò)allocator自動(dòng)申請(qǐng)更多的空間。
特性如下:
listlist容器,以雙向鏈表方式組織元素,支持高效地刪除和插入操作,但訪問(wèn)元素,需要遍歷整個(gè)鏈表,直到找到目標(biāo)元素。
特性如下:
forward_listforward_list容器,以單鏈表的形式組織元素,是一類比list容器快、更節(jié)省空間的容器。
dequedeque容器可以進(jìn)行雙向擴(kuò)充,首尾都可以高效插入和刪除元素。
3.2 關(guān)聯(lián)式容器與序列式容器不同,關(guān)聯(lián)式容器在存儲(chǔ)元素時(shí)會(huì)為每個(gè)元素都配備一個(gè)key,key和元素data以鍵值對(duì)的方式存儲(chǔ)到容器中。關(guān)聯(lián)式容器可以通過(guò)key找到對(duì)應(yīng)的元素,且存儲(chǔ)元素時(shí),默認(rèn)會(huì)根據(jù)各元素key的大小做升序排序,因此,關(guān)聯(lián)式容器在查找、訪問(wèn)、插入和刪除指定元素的效率更高。
map和multi_mapmap和multi_map的底層實(shí)現(xiàn)是RB-tree,其中每個(gè)key都對(duì)應(yīng)一個(gè)data,且在map中key值是獨(dú)一無(wú)二的,使用multi_map時(shí)意味著key值可以重復(fù)。
map的特性如下:
multi_map的特性如下:
set和multi_setset和multi_set的底層實(shí)現(xiàn)同樣是RB-tree,且要求key和value值必須相等。
set的特性如下:
unordered_map和unordered_multimap(無(wú)序)unordered_map和unordered_multimap的底層實(shí)現(xiàn)是哈希表,也采用鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù),且鍵值對(duì)是無(wú)序的,擅長(zhǎng)通過(guò)鍵查找對(duì)應(yīng)值,但是使用迭代器遍歷容器中的元素效率不高。
unordered_set和unordered_multiset(無(wú)序)unordered_set和unordered_multiset容器的底層實(shí)現(xiàn)也是哈希表,即鍵值對(duì)是無(wú)序的,且key值等于value值。
至此,完成了對(duì)C++的STL簡(jiǎn)單介紹,后續(xù)將對(duì)六大組件進(jìn)行詳細(xì)描述。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:1.STL六大組件-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://aaarwkj.com/article40/dpghho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、定制開(kāi)發(fā)、品牌網(wǎng)站設(shè)計(jì)、ChatGPT、動(dòng)態(tài)網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容