RM新时代网站-首页

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

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

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

C++之STL庫(kù)中的容器

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

1、容器

前面跟大家介紹過(guò)STL庫(kù),STL主要是由6大部分組成,其中第一個(gè)提到的就是容器,容器在介紹STL中小哥有簡(jiǎn)單的跟大家介紹過(guò),今天稍微再詳細(xì)介紹一下。

首先需要看看STL中常用的一些容器及分類:

圖片

所謂容器表面上的意思就是用于容納數(shù)據(jù),存儲(chǔ)數(shù)據(jù)的對(duì)象。

從上圖可以看出,基礎(chǔ)的容器根據(jù)其所存儲(chǔ)數(shù)據(jù)的形式分為順序容器和關(guān)聯(lián)容器。

順序容器當(dāng)然就是數(shù)據(jù)成員順序存儲(chǔ)的形式,是一種線性結(jié)構(gòu),每個(gè)數(shù)據(jù)成員都有固定的位置,所以成員都是按位置來(lái)進(jìn)行存儲(chǔ),類似于C語(yǔ)言中的數(shù)組形式。

關(guān)聯(lián)容器是一種非線性結(jié)構(gòu),沒有嚴(yán)格的順序,主要是按數(shù)值來(lái)進(jìn)行存儲(chǔ),通常通過(guò)迭代器進(jìn)行訪問,迭代器目前可以簡(jiǎn)單理解為"指針"。

2、順序容器

順序容器主要是三種:vector、list和deque

vector向量,其操作方式類似于動(dòng)態(tài)數(shù)組,并且可以像數(shù)組一樣直接進(jìn)行訪問,且通常只在后端進(jìn)行添加與刪除數(shù)據(jù),中間插入效率太低,如果vector向量空間不夠,其會(huì)動(dòng)態(tài)進(jìn)行創(chuàng)建。

list雙向鏈表,該鏈表與我們平常的鏈表數(shù)據(jù)結(jié)構(gòu)類似,其索引性能較差,不能進(jìn)行隨機(jī)數(shù)據(jù)訪問,不像vector可以直接進(jìn)行數(shù)據(jù)訪問,而是需要從頭不斷的進(jìn)行遍歷,但是雙向鏈表list的優(yōu)點(diǎn)在于可以輕松的向鏈表容器中插入數(shù)據(jù)。

deque雙端隊(duì)列屬于vector與list的折中版本,支持這兩者的大部分操作,不過(guò)其性能上都沒有其他兩種基本容器好。

圖片

3、關(guān)聯(lián)容器

關(guān)聯(lián)容器主要有四種:map、set、multimap和multiset。

這些關(guān)聯(lián)容器都是基于平衡二叉樹來(lái)實(shí)現(xiàn)的,所以其也是一種鏈?zhǔn)酱鎯?chǔ)方式,不過(guò)相比順序存儲(chǔ)從一條線上擴(kuò)展到了一個(gè)面。

當(dāng)需要在中間插入元素的時(shí)候,對(duì)于vector是最慢的,list當(dāng)然是最快的,而對(duì)于關(guān)聯(lián)容器采用二叉樹結(jié)構(gòu),中間插入元素所要改變的關(guān)系相比vector要少很多,但比list要多一些。

而對(duì)于數(shù)據(jù)元素的檢索,vector無(wú)疑是最快的,list當(dāng)然是最慢的,但對(duì)于關(guān)聯(lián)容器其檢索效果雖然比不過(guò)vector,但由于二叉樹的結(jié)構(gòu)查找速度比list要快很多,所以這也就是set容器的優(yōu)勢(shì)。

而對(duì)于map采用一種key與value的映射關(guān)系,相比vector用數(shù)字下標(biāo)進(jìn)行索引,map能夠提供一種用字符來(lái)索引的功能,這也就是他的特點(diǎn),當(dāng)然也可以理解set是一種key與value相等的map。

而對(duì)于mulitset與multimap僅僅只是在set和map容器的元素唯一性上進(jìn)行了可以不唯一的擴(kuò)展。

4、容器適配器

首先容器適配器并不是容器,而是通過(guò)封裝或限制容器的接口構(gòu)造一些有特殊用途的適配器結(jié)構(gòu)。

STL中主要包含三種適配器:

stack---棧,先進(jìn)后出

queue--隊(duì)列,先進(jìn)先出

priority_queue--優(yōu)先級(jí)隊(duì)列

相比普通隊(duì)列,優(yōu)先級(jí)隊(duì)列在插入時(shí)會(huì)根據(jù)關(guān)鍵詞自動(dòng)排序,出隊(duì)列會(huì)按照排列順序優(yōu)先出隊(duì)列。

這些容器適配器也可以通過(guò)選擇不同的基礎(chǔ)容器來(lái)實(shí)現(xiàn),一般情況下會(huì)選擇默認(rèn)容器來(lái)進(jìn)行適配,當(dāng)然也可以進(jìn)行手動(dòng)修改,但不是每種適配器都可以由任意基礎(chǔ)容器來(lái)進(jìn)行實(shí)現(xiàn),畢竟每種基礎(chǔ)容器存在一些功能上的限制。

最 后

好了,這里小哥就簡(jiǎn)單介紹了STL中的容器和容器適配器的整體介紹,后面會(huì)對(duì)每個(gè)容器舉例介紹,本系列文章后續(xù)還會(huì)更新,記得關(guān)注學(xué)習(xí)哦。

聲明:本文內(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)投訴
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    495

    瀏覽量

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

    關(guān)注

    0

    文章

    86

    瀏覽量

    18319
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    c語(yǔ)言入門知識(shí)STL

    這周終于可以給大家把STL方面的面試題總結(jié)出來(lái)了,突然發(fā)現(xiàn)它里面的細(xì)節(jié)非常多,只有你想不到的,沒有它沒有的。對(duì)于C++程序員來(lái)說(shuō),STL庫(kù)里面的知識(shí)也是非常重要的,只要想在技術(shù)這條路線上有長(zhǎng)遠(yuǎn)的發(fā)展,那么就一定要掌握它。不管是學(xué)
    的頭像 發(fā)表于 03-10 09:31 ?1119次閱讀

    C++STL算法(二)

    C++STL算法(二)
    的頭像 發(fā)表于 07-18 14:49 ?1034次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b><b class='flag-5'>STL</b>算法(二)

    c++STL算法(三)

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

    C++文件操作

    C++文件操作
    的頭像 發(fā)表于 07-21 10:52 ?1107次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    C++零基礎(chǔ)教程STL容器stack容器,輕松上手C++STL

    編程語(yǔ)言C++語(yǔ)言
    電子學(xué)習(xí)
    發(fā)布于 :2023年01月14日 11:27:23

    C++零基礎(chǔ)教程STL容器queue容器,輕松上手C++STL

    編程語(yǔ)言C++語(yǔ)言
    電子學(xué)習(xí)
    發(fā)布于 :2023年01月14日 11:41:21

    C++零基礎(chǔ)教程STL容器deque容器,輕松上手C++STL

    編程語(yǔ)言C++語(yǔ)言
    電子學(xué)習(xí)
    發(fā)布于 :2023年01月14日 11:41:55

    C++ STL的概念及舉例

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

    詳細(xì)剖析C++的的3種容器

    容器是隨著面向?qū)ο笳Z(yǔ)言的誕生而提出的,容器類在面向?qū)ο笳Z(yǔ)言中特別重要,甚至它被認(rèn)為是早期面向?qū)ο笳Z(yǔ)言的基礎(chǔ)。在現(xiàn)在幾乎所有的面向?qū)ο蟮恼Z(yǔ)言中也都伴隨著一個(gè)容器集,在C++
    的頭像 發(fā)表于 01-09 12:57 ?4953次閱讀
    詳細(xì)剖析<b class='flag-5'>C++</b>的的3種<b class='flag-5'>容器</b>

    C++17 STL標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)教材電子書免費(fèi)下載

    C++標(biāo)準(zhǔn)模板庫(kù)STL)。這本書中的例子展示了如何充分的利用STL。不過(guò),作為本書的第1章,我們還是需要了解一下那些比較重要的新語(yǔ)言特性。
    發(fā)表于 02-28 08:00 ?7次下載
    <b class='flag-5'>C</b>++17 <b class='flag-5'>STL</b>標(biāo)準(zhǔn)<b class='flag-5'>庫(kù)</b>學(xué)習(xí)教材電子書免費(fèi)下載

    C++ STL基本概念是什么

    STL,英文全稱 standard template library,中文可譯為標(biāo)準(zhǔn)模板庫(kù)或者泛型庫(kù),其包含有大量的模板類和模板函數(shù),是 C++ 提供的一個(gè)基礎(chǔ)模板的集合,用于完成諸如
    的頭像 發(fā)表于 02-27 15:56 ?1355次閱讀
    <b class='flag-5'>C++</b> <b class='flag-5'>STL</b>基本概念是什么

    C++學(xué)習(xí)筆記順序容器

    C++的順序容器是一種用于存儲(chǔ)和管理元素序列的數(shù)據(jù)結(jié)構(gòu)。它們提供了一組有序的元素,并支持在序列的任意位置插入和刪除元素。C++標(biāo)準(zhǔn)庫(kù)中提供
    的頭像 發(fā)表于 05-11 17:05 ?590次閱讀

    C++入門通用算法

    C++ 是一種強(qiáng)大的編程語(yǔ)言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過(guò)迭代器來(lái)操作容器的元素,因此它們是通用的,可以用于不同類型的
    的頭像 發(fā)表于 05-17 09:40 ?655次閱讀

    C++STL容器的常見容器及基本操作

    一、什么是容器? 所謂容器,就是可以承載,包含元素的一個(gè)器件,它是STL六大組件之一,是容器、算法、迭代器中最重要也是最核心的一部分。 二、STL
    的頭像 發(fā)表于 11-10 11:23 ?464次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b><b class='flag-5'>STL</b><b class='flag-5'>容器</b><b class='flag-5'>中</b>的常見<b class='flag-5'>容器</b>及基本操作

    STL內(nèi)容介紹

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