0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是STL?

汽車電子技術(shù) ? 來源: 嵌入式情報(bào)局 ? 作者:情報(bào)小哥 ? 2023-02-21 11:08 ? 次閱讀

大家好,我是情報(bào)小哥~

**1、什么是STL **

STL庫英文名叫standard template library,標(biāo)準(zhǔn)模板庫,并且它屬于標(biāo)準(zhǔn)庫的一部分,前面小哥跟大家講解模板的相關(guān)知識(shí)就是為其進(jìn)行鋪墊的。

STL主要是由一些模板函數(shù)和模板類構(gòu)成的,其包含了C++程序開發(fā)中一些非常通用的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)與算法封裝,從而達(dá)到了非常良好的軟件復(fù)用和擴(kuò)展能力,當(dāng)然其背后帶來的是應(yīng)用程序開發(fā)的高效,你不用再去徒手編輯各種數(shù)據(jù)結(jié)構(gòu)和算法來使用,其實(shí)現(xiàn)的高效和穩(wěn)定也減少了程序bug。

而對(duì)于C語言而言目前暫時(shí)沒有這樣的庫,大部分都是各大廠家整理的,或者是一些大牛自己開源的等等,這樣就難以形成一個(gè)比較好的標(biāo)準(zhǔn),不太便于程序員代碼之間的交流和軟件的復(fù)用。

STL庫既然是一個(gè)庫就跟標(biāo)準(zhǔn)庫一樣,如果你覺得方便,或者有這塊需求,直接白嫖,如果你覺得STL實(shí)現(xiàn)得不夠好,或者需改良,也可以自己來編寫。

**2、STL的組成 **

對(duì)于STL主要分為如下6大組件 :

圖片

下面小哥簡(jiǎn)單的介紹每個(gè)組件:

**容器 : **是一些用于存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),比如鏈表、隊(duì)列、棧等等,大部分都是類模板。

**算法 : **也就是我們平時(shí)提到的各種算法,比如排序,查找等等,大部分都是一些函數(shù)模板,

**迭代器 : **名字看起來比較高大上,其實(shí)可以認(rèn)為它就是一個(gè)“智能指針”,用于遍歷容器,所以每種容器都有自己的迭代器用來遍歷。

**分配器 : **主要是用于輔助容器分配和管理空間。

**仿函數(shù) : ** 主要是與算法結(jié)合,因函數(shù)指針無法滿足C++抽象需求,通過重載操作符(),來實(shí)現(xiàn)類似函數(shù)調(diào)用的過程。

**適配器 : **其名稱就可以看出,主要是用于接口的相互轉(zhuǎn)換,從而協(xié)調(diào)多種端口,容器、仿函數(shù)、迭代器都可以與適配器結(jié)合,類比電源適配器進(jìn)行電壓轉(zhuǎn)換。

那么下面小哥簡(jiǎn)單的通過一個(gè)圖來描述這6大組件之間的關(guān)聯(lián),以便大家更好的理解。

圖片

分配器為容器分配數(shù)據(jù)空間,而迭代器就是為了遍歷容器,算法通過迭代器來訪問容器,仿函數(shù)使得算法更加的靈活,而這些適配器可以為外界提供新的接口。

**3、STL的容器的使用體驗(yàn) **

這里通過一個(gè)簡(jiǎn)單的容器操作來體驗(yàn)一下最基礎(chǔ)的STL使用:

參考例子:

1#include
2#include
3#include //向量(與數(shù)組類似)
4#include //隊(duì)列
5
6using namespace std;
7
8int main(int argc, char *argv[])
9{
10 //1、向量容器
11 vector vr(5); //通過vertor容器類模板定義一個(gè)int類型的向量vr
12
13 cout<<" vr size: "<14
15 for(int Index = 0; Index < vr.size(); Index++)
16 {
17 vr[Index] = Index + 1; //直接以數(shù)組方式訪問即可
18 cout<<" vr["<"]"<19 }
20
21 //2、隊(duì)列容器適配器(FIFO--即先進(jìn)先出)
22 queue qf; //通過queue類模板創(chuàng)建一個(gè)隊(duì)列
23
24 for(int cnt = 0 ;cnt < 5;cnt++)
25 {
26 qf.push((float)cnt+0.1); //進(jìn)行入隊(duì)操作
27 cout<<" Queue IN : "<<(float)cnt+0.1<//獲得端口數(shù)據(jù)
28 }
29
30 while(!qf.empty())
31 {
32 cout<<" Queue Out: "<//獲得端口數(shù)據(jù)
33 qf.pop();//進(jìn)行出隊(duì)操作
34 }
35
36 return EXIT_SUCCESS;
37}

運(yùn)行結(jié)果:

圖片

只需要包含相應(yīng)的頭文件即可使用相應(yīng)的模板來供應(yīng)用程序使用,比如例子中使用的隊(duì)列等,不需要我們像C語言那樣再徒手編寫隊(duì)列了,簡(jiǎn)直不要再方便了~

當(dāng)然STL庫遠(yuǎn)比上面復(fù)雜得多,后面小哥還會(huì)為大家慢慢道來~

**最 后 **

這里小哥就介紹了C++中白嫖STL庫。本系列文章還會(huì)持續(xù)更新,以最通俗易懂的方式跟大家談?wù)凜++,期待您的關(guān)注與支持~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4331

    瀏覽量

    62622
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73651
  • STL
    STL
    +關(guān)注

    關(guān)注

    0

    文章

    86

    瀏覽量

    18327
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    c++之STL算法(三)

    c++之STL算法(三)
    的頭像 發(fā)表于 07-18 15:00 ?1294次閱讀
    c++之<b class='flag-5'>STL</b>算法(三)

    X-CUBE-STL與ARM的STL的區(qū)別是什么?

    大家好,我正在做一些關(guān)于 STL 的研究。STM 的 X-CUBE-STL 產(chǎn)品與 ARM STL 庫有何不同?你為什么要用一個(gè)而不是另一個(gè)?
    發(fā)表于 12-02 07:18

    effective stl中文版下載pdf

    導(dǎo)讀你已經(jīng)熟悉了STL。你知道怎么建立容器,迭代它們的內(nèi)容,添加刪除元素和應(yīng)用常見算法,比如find和sort。但你并不滿足,你不能擺脫STL所提供的超過它們能帶來的好處
    發(fā)表于 08-25 17:47 ?0次下載

    C++ STL的概念及舉例

      本篇文章是作者本人使用STL 后的一些看法, 對(duì)於想要靠此文章學(xué)習(xí)STL, 是不可能的. 建議叁后面介紹的一些書入門.   STL的概念   在STL 中, 大至上分三個(gè)主要的
    發(fā)表于 08-30 11:39 ?1413次閱讀

    STEP7 STL語句表編程使用手冊(cè)

    本手冊(cè)是用STL語句表編程語言編制用戶程序的用戶指南。 本手冊(cè)也包括描述STL語言元素的語法和功能的參考章節(jié)
    發(fā)表于 03-10 16:05 ?197次下載
    STEP7 <b class='flag-5'>STL</b>語句表編程使用手冊(cè)

    STL算法在GIS中的應(yīng)用

    使用STL 算法實(shí)現(xiàn)GIS 算法可以保證它的簡(jiǎn)潔和高效該文結(jié)合C++代碼實(shí)例抽象出了地理算子的概念應(yīng)用在GIS 算法當(dāng)中通過定制適配器來消除地理算子和STL 算法之間的不匹配同時(shí)拓展了ST
    發(fā)表于 06-28 16:55 ?33次下載

    數(shù)據(jù)結(jié)構(gòu)與STL

    學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與STL的一些資料,新手可以慢慢看。
    發(fā)表于 12-22 14:41 ?0次下載

    基于STL曲面網(wǎng)格重建算法

    STL(stereo lithography)作為3D掃描數(shù)據(jù)和快速原型制造事實(shí)上的標(biāo)準(zhǔn),廣泛應(yīng)用于娛樂、制造業(yè)和Internet等領(lǐng)域.隨著3D模型越來越復(fù)雜,數(shù)據(jù)量越來越龐大,從STL文件難以
    發(fā)表于 12-25 11:52 ?1次下載
    基于<b class='flag-5'>STL</b>曲面網(wǎng)格重建算法

    S7-STL中文編程手冊(cè)

    S7-STL中文編程手冊(cè)免費(fèi)下載。
    發(fā)表于 04-23 11:48 ?28次下載

    stl-thumb STL縮略圖生成器

    ./oschina_soft/stl-thumb.zip
    發(fā)表于 05-30 09:46 ?57次下載
    <b class='flag-5'>stl</b>-thumb <b class='flag-5'>STL</b>縮略圖生成器

    STL的概述

    C++ STL 是一套功能強(qiáng)大的 C++ 模板類,提供了通用的模板類和函數(shù),這些模板類和函數(shù)可以實(shí)現(xiàn)多種流行和常用的算法,關(guān)于 STL 呢,下面通過一個(gè)系統(tǒng)框圖來對(duì)其進(jìn)行一個(gè)總結(jié)
    的頭像 發(fā)表于 01-20 17:08 ?1392次閱讀
    <b class='flag-5'>STL</b>的概述

    C++之STL庫中的容器

    前面跟大家介紹過STL庫,STL主要是由6大部分組成,其中第一個(gè)提到的就是容器,容器在介紹STL中小哥有簡(jiǎn)單的跟大家介紹過,今天稍微再詳細(xì)介紹一下
    的頭像 發(fā)表于 02-21 10:55 ?1215次閱讀
    C++之<b class='flag-5'>STL</b>庫中的容器

    博途使用STL中的MOVE指令

    現(xiàn)在,在 S7-1500 CPU 上可使用 STL 中的 MOVE 指令進(jìn)行編程。
    的頭像 發(fā)表于 06-06 11:10 ?6615次閱讀
    博途使用<b class='flag-5'>STL</b>中的MOVE指令

    使用STL函數(shù)控制傳送帶

    要?jiǎng)?chuàng)建 STL 函數(shù)塊“STL-Conveyor”,請(qǐng)按以下步驟操作
    的頭像 發(fā)表于 10-12 16:00 ?624次閱讀
    使用<b class='flag-5'>STL</b>函數(shù)控制傳送帶

    STL內(nèi)容介紹

    1 什么是STL? STL(Standard Template Library),即標(biāo)準(zhǔn)模板庫,是一個(gè)具有工業(yè)強(qiáng)度的,高效的C++程序庫。它被容納于C++標(biāo)準(zhǔn)程序庫(C++ Standard
    的頭像 發(fā)表于 11-13 11:32 ?851次閱讀
    <b class='flag-5'>STL</b>內(nèi)容介紹