C 容器(一)C 標準模板庫(STL)和容器

2021-08-19 15:56:34 字數 1467 閱讀 1899

c++標準模板庫其實屬於c++標準庫的一部分,c++標準模板庫主要是定義了標準模板的定義與宣告,而這些模板主要都是類模板,我們可以呼叫這些模板來定義乙個具體的類;使用stl不需要自己手動建立乙個函式模板或者是類模板,這些模板都定義在標準模板庫中,我們只需要學會怎麼使用這些類模板來定義乙個具體的類,然後能夠使用類提供的各種方法來處理資料。

容器(containers)、演算法(algorithms)、迭代器(iterators)、

函式物件(functors)、介面卡(adapters)、分配器(allocators)

1、迭代器

迭代器是一種物件,它能夠用來遍歷stl容器中的部分或全部元素,每個迭代器物件代表容器中的確定的位址,所以可以認為迭代器其實就是用來指向容器中

資料的指標,我們可以通過改變這個指標來遍歷容器中的所有元素。

2、容器

首先,我們必須理解一下什麼是容器,對比我們生活當中的容器,例如水杯、桶、水瓶等等這些東西,其實他們都是容器,他們的乙個共同點就是:都是用來

存放液體的,能夠用來存放一些東西;其實在我們的c++中說的這個容器其實作用也是用來存放"東西",但是存放的是資料,在c++中容器就是一種用來存放

資料的物件。

(1)c++中的容器其實是容器類例項化之後的乙個具體的物件,那麼可以把這個物件看成就是乙個容器。

(2)因為c++中容器類是基於類模板定義的,也就是我們這裡說的stl(標準模板類)。為什麼需要做成模板的形式呢?因為我們的容器中存放的資料型別其實

是相同的,如果就因為資料型別不同而要定義多個具體的類,這樣就不合適,而模板恰好又能夠解決這種問題,所以c++中的容器類是通過類模板的方式定義的

,也就是stl。

(3)容器還有另乙個特點是容器可以自行擴充套件。在解決問題時我們常常不知道我們需要儲存多少個物件,也就是說我們不知道應該建立多大的記憶體空間來存放我們

的資料。顯然,陣列在這一方面也力不從心。容器的優勢就在這裡,它不需要你預先告訴它你要儲存多少物件,只要你建立乙個容器物件,並合理的呼叫它所提

供的方法,所有的處理細節將由容器來自身完成。它可以為你申請記憶體或釋放記憶體,並且用最優的演算法來執行命令。

(4)容器是隨著物件導向語言的誕生而提出的,容器類在物件導向語言中特別重要,甚至它被認為是早期物件導向語言的基礎。

4、容器的分類

stl對定義的通用容器分三類:順序性容器關聯式容器容器介面卡

順序容器主要有:vector、list、deque等。其中vector表示一段連續的記憶體位址,基於陣列的實現,list表示非連續的記憶體,基於鍊錶實現。deque與vector類似,但是對於首元素提供刪除和插入的雙向支援。

關聯容器主要有map和set。map是key-value形式的,set是單值。map和set只能存放唯一的key值,multimap和multiset可以存放多個相同的key值。

容器類自動申請和釋放記憶體,我們無需new和delete操作。

C 標準模板庫STL

stl是標準c 庫的一部分。stl模板類為c 提供了完善的資料結構和演算法。stl的特點 型別引數化 即stl的 中可處理任意自定義型別的物件。泛型程式設計 generic programming 它以模板為基礎,弱化了 實體型別的差異,簡化了程式設計時問題抽象的模型,提供了更好的 封裝性和彈性。s...

C 標準模板庫STL

stl 標準模板庫 包括容器,演算法,迭代器 容器用來儲存資料,比如vector,list,堆疊等,string也算 一共有八個 演算法就是對容器進行操作,比如增刪改查資料 迭代器用來遍歷容器itreator 用指標的方式來遍歷容器的資料 注 平時使用的時候大部分時候我們都用上了,但是面試的時候不能...

c (標準模板庫STL)

stl是一種泛型程式設計 generic programming 容器主要有以下分類 例如 容器的成員函式begin 返回指向容器中第乙個元素的迭代器 end 返回指向容器中最後乙個元素後繼位置的迭代器。下面通過stl中提供的乙個泛型函式find 來說明迭代器與泛型演算法的關係 首先看下stl對於f...