成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

STL剖析(一):體系結(jié)構(gòu)概覽-創(chuàng)新互聯(lián)

一.什么是STL?

STL全稱(chēng)是Standard Template Library,它屬于泛型編程的范疇(泛型編程的代表性作品),泛型編程旨在編寫(xiě)?yīng)毩⒂跀?shù)據(jù)類(lèi)型的代碼,也就是說(shuō)代碼中的數(shù)據(jù)類(lèi)型只有在編譯的時(shí)候才會(huì)確定,否則為一個(gè)占位符。

網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶(hù),提高在線咨詢(xún)和轉(zhuǎn)化,使成都網(wǎng)站營(yíng)銷(xiāo)成為有效果、有回報(bào)的無(wú)錫營(yíng)銷(xiāo)推廣。創(chuàng)新互聯(lián)專(zhuān)業(yè)成都網(wǎng)站建設(shè)十載了,客戶(hù)滿(mǎn)意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶(hù)聯(lián)系。

C++的STL中包含了各種常用的數(shù)據(jù)結(jié)構(gòu)類(lèi)模板以及操作這些數(shù)據(jù)結(jié)構(gòu)的泛型算法。

二.STL的六大組件 2.1 概述

STL包含六大組件:容器(Containers)、分配器(Allocators)、算法(Algorithms)、迭代器(Iterators)、函數(shù)對(duì)象(Functor Objects)和適配器(Adapters),其中函數(shù)對(duì)象也被稱(chēng)之為仿函數(shù)(Functors)。

STL六大組件的交互關(guān)系如下圖所示:

六大組件交互關(guān)系

圖源自侯捷老師的《STL源碼剖析》,侵權(quán)刪。

從上圖可以看出,STL中最重要的兩種組件為容器和算法,剩下的組件都服務(wù)于這兩者。分配器主要用來(lái)為容器分配存儲(chǔ)空間;迭代器則用來(lái)遍歷容器,方便算法的調(diào)用;函數(shù)對(duì)象則用來(lái)協(xié)助算法完成不同的策略變化;適配器可以修飾容器或函數(shù)對(duì)象。

2.2 容器

容器是用來(lái)存放數(shù)據(jù)的,STL定義了各種常用的數(shù)據(jù)結(jié)構(gòu)來(lái)對(duì)存放的數(shù)據(jù)進(jìn)行組織。C++的容器大致分類(lèi)如下:

容器分類(lèi)

其中:

  • 順序容器的表示線性數(shù)據(jù)結(jié)構(gòu),通過(guò)其可以順序地訪問(wèn)數(shù)據(jù);
  • 關(guān)聯(lián)容器底層數(shù)據(jù)結(jié)構(gòu)為紅黑樹(shù),其搜索的時(shí)間復(fù)雜度為 O ( log n ) O(\text{log}n) O(logn);
  • 無(wú)序關(guān)聯(lián)容器底層數(shù)據(jù)為哈希表,其同樣可以實(shí)現(xiàn)快速搜索(均攤時(shí)間復(fù)雜度為 O ( 1 ) O(1) O(1),最壞時(shí)間復(fù)雜度為 O ( n ) O(n) O(n))。

均攤時(shí)間復(fù)雜度指某些操作的時(shí)間復(fù)雜度較高,但操作后使得數(shù)據(jù)的組成狀況得以改善,使得后續(xù)系列操作的時(shí)間復(fù)雜度降低。

2.3 分配器

分配器主要用來(lái)為容器分配和釋放存儲(chǔ)空間。STL為容器提供了默認(rèn)分配器std::allocator,但用戶(hù)也可以通過(guò)模板參數(shù)來(lái)指定其它分配器或自定義的分配器(一般沒(méi)這個(gè)必要)。

2.4 迭代器

通過(guò)迭代器可以訪問(wèn)容器中的元素,其充當(dāng)著容器與算法間的橋梁。

所有容器都有對(duì)應(yīng)的迭代器,STL中迭代器可以分為下圖所示的5類(lèi):

迭代器

箭頭代表迭代器之間存在繼承關(guān)系。

迭代器類(lèi)型說(shuō)明
Input(輸入迭代器)支持向前迭代遍歷元素以及對(duì)元素的讀取
Forward(正向迭代器)支持向前迭代遍歷元素以及對(duì)元素的讀寫(xiě)
Bidirectional(雙向迭代器)支持向前/向后迭代遍歷元素以及對(duì)元素的讀寫(xiě)
Random Access(隨機(jī)訪問(wèn)迭代器)支持隨機(jī)訪問(wèn)任意位置的元素以及對(duì)元素的讀寫(xiě)
Output(輸出迭代器)支持向前迭代遍歷元素以及對(duì)元素的寫(xiě)入
2.5 算法

算法通過(guò)迭代器來(lái)對(duì)容器中的元素進(jìn)行排序、計(jì)數(shù)、搜索等操作。

STL中的容器都可以使用相同的算法。需要注意的是,某些特定類(lèi)型的容器可能也定義了進(jìn)行過(guò)特殊優(yōu)化的算法,因此,若容器中實(shí)現(xiàn)了相應(yīng)的算法,則推薦使用容器自帶的,否則才考慮使用通用的算法。

2.6 函數(shù)對(duì)象

函數(shù)對(duì)象是某種class的實(shí)例對(duì)象,這類(lèi)class重載了函數(shù)調(diào)用運(yùn)算符(),使得函數(shù)對(duì)象可以被當(dāng)作一般函數(shù)來(lái)使用。

STL提供了許多內(nèi)置的函數(shù)對(duì)象來(lái)幫助函數(shù),其大致可以分為:

  • 函數(shù)運(yùn)算:例如plusminus
  • 關(guān)系運(yùn)算:例如less、greater
  • 邏輯運(yùn)算:例如logical_and
2.7 適配器

適配器主要用來(lái)修飾容器或函數(shù),適配器主要包括容器適配器和函數(shù)適配器。

注意還有迭代器適配器,但一般很少用上,所以略過(guò)。

2.7.1 容器適配器

容器適配器指將對(duì)容器進(jìn)行封裝,并重新對(duì)容器包含的成員函數(shù)進(jìn)行組合,從而提供某些特定數(shù)據(jù)結(jié)構(gòu)的功能。

STL中常見(jiàn)的容器適配器包括:

  • stack(堆棧):底層容器為deque
  • queue(隊(duì)列):底層容器為deque
  • priority_queue(優(yōu)先級(jí)隊(duì)列):底層容器為vector
2.7.2 函數(shù)適配器

函數(shù)適配器能改變函數(shù)或函數(shù)對(duì)象的行為。例如將函數(shù)對(duì)象的參數(shù)綁定至某個(gè)特殊值,使得二元參數(shù)函數(shù)對(duì)象變?yōu)橐辉獏?shù)函數(shù)對(duì)象。

三.示例代碼

包含STL六大組件的栗子如下:

#include#include#include 
#includeusing namespace std;

int main()
{vector>arr = {12, 45, 110, 2, 77, 44, 8 };

    cout<< count_if(arr.begin(), arr.end(),
        not1(bind2nd(less(), 35)))<< endl;
    return 0;
}

在上述代碼中:

  • 使用了順序容器vector,并顯式調(diào)用了STL的默認(rèn)分配器allocator。
  • count_if是STL實(shí)現(xiàn)的統(tǒng)計(jì)符合某種條件的算法函數(shù)。
  • 算法對(duì)容器數(shù)據(jù)進(jìn)行統(tǒng)計(jì)需要借助迭代器,代碼中begin()表示指向容器的第一個(gè)元素,end()指向容器最后一個(gè)元素的后一個(gè)位置,即左閉右開(kāi)。
  • less為實(shí)現(xiàn)x< y關(guān)系運(yùn)算的函數(shù)對(duì)象。
  • not1bind2nd表示函數(shù)適配器,bind2nd表示將關(guān)系運(yùn)算函數(shù)對(duì)象的第二個(gè)參數(shù)y綁定為35,not1表示對(duì)一元函數(shù)對(duì)象的真假值取反。
四.結(jié)語(yǔ)

本文的完成參考了如下資料:

  • cppreference.com
  • cplusplus.com
  • 《STL源碼剖析》侯捷著

以上便是本文的全部?jī)?nèi)容,若有任何錯(cuò)誤請(qǐng)批評(píng)指正?。。?/p>

你是否還在尋找穩(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)查看詳情吧

網(wǎng)頁(yè)名稱(chēng):STL剖析(一):體系結(jié)構(gòu)概覽-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://jinyejixie.com/article14/djeoge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、微信小程序、ChatGPT域名注冊(cè)、外貿(mào)建站、小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
和林格尔县| 彩票| 东平县| 沂水县| 乳源| 柳河县| 江门市| 静宁县| 曲沃县| 杨浦区| 铜山县| 松溪县| 上饶县| 乌兰浩特市| 比如县| 梁河县| 监利县| 湖南省| 塔河县| 岐山县| 梓潼县| 依安县| 洛扎县| 全椒县| 东城区| 肥东县| 丰都县| 玉屏| 句容市| 麟游县| 宜兰县| 开封市| 铜梁县| 白山市| 伊金霍洛旗| 三台县| 开江县| 桂林市| 万州区| 日土县| 扶沟县|