C 學習筆記 STL標準模板庫(二)STL容器類

2021-10-06 10:26:14 字數 3115 閱讀 3868

介面卡容器

關聯式容器

vector與deque的迭代器支援算術運算,list的迭代器只能進行++/–操作,不支援普通的算術運算。

引用標頭檔案用於儲存連續的元素,陣列,定義一維陣列,如下,

vector<

int>

pos(32,

-1);

//定義32個字元

vector<

char

>a(

32); a.

pop_back()

; a.

push_back(0

);

首先這是動態的,非常靈活。儲存的時候是連續的線性空間,支援高效的隨機訪問和在尾端插入/刪除操作,但其他位置的插入/刪除操作效率低下。

class

vector

;//目前使用了的空間頭

iterator finish;

iterator end()

;//目前使用了的空間的尾

size_type size()

reference front()

reference back()

iterator end_of_storage;

//目前可用空間的尾

bool

empty()

}

當我們用push_back插入的時候,會檢查 還有沒有備用的空間 ,如果沒有的話

要經歷allocator先按規則分配空間 然後把之前的拷貝過去, 再插入,最後釋放原來的空間 這是乙個龐大的工程

分配空間的規則

hash_node;

//節點

typedef

struct

hash_table;

//表map()是stl的乙個關聯容器,一對多對映,基於關鍵字快速查詢,不允許重複值,物件是模板類,需要關鍵字和儲存物件兩個模板引數,其中第乙個引數稱為關鍵字,每個關鍵字只能在map**現一次;第二個引數稱為該關鍵字的值,可理解為「」 。map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的。

unordered_map()則是無序的,unordered_map內部實現了乙個雜湊表(也叫雜湊表,通過把關鍵碼值對映到hash表中乙個位置來訪問記錄,查詢的時間複雜度可達到o(1),其在海量資料處理中有著廣泛應用)。

multimap() 容器儲存的是有序的鍵/值對,但它可以儲存重複的元素。multimap 中會出現具有相同鍵的元素序列,它們會被新增到容器中。

map、set、multiset、multimap這四種關聯容器是有序的。有序的含義是它們按照順序進行儲存。

std::pair主要的作用是將兩個資料組合成乙個資料,兩個資料可以是同一型別或者不同型別。pair是將2個資料組合成乙個資料,例如stl中的map就是將key,value放在一起來儲存。當乙個函式需要返回2個資料的時候,可以選擇pair。 pair的實現是乙個結構體,主要的兩個成員變數是first,second 因為是使用struct不是class,所以可以直接使用pair的成員變數。

template pair make_pair

(t1 a, t2 b)

我們可以使用pair的建構函式也可以使用make_pair來生成我們需要的pair。 一般make_pair都使用在需要pair做引數的位置,可以直接呼叫make_pair生成pair物件。

vectorint,

int>>p(

10,make_pair<

int,

int>(45

,99))

; cout << p[0]

.first << endl;

//first得到pair的第乙個值

cout << p[9]

.second << endl;

//second得到第二個值

c++ 標準模板庫 stl(standard template library) 一共給我們提供了四種智慧型指標:()auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,其中 auto_ptr 是 c++98 提出的,c++11 已將其摒棄,並提出了 unique_ptr 替代 auto_ptr。auto_ptr的缺點是:存在潛在的記憶體崩潰問題。

unique_ptr

實現獨佔式擁有或嚴格擁有概念,保證同一時間內只有乙個智慧型指標可以指向該物件。它對於避免資源洩露。

shared_ptr

實現共享式擁有概念。多個智慧型指標可以指向相同物件,該物件和其相關資源會在「最後乙個引用被銷毀」時候釋放。從名字share就可以看出了資源可以被多個指標共享,它使用計數機制來表明資源被幾個指標共享。可以通過成員函式use_count()來檢視資源的所有者個數。除了可以通過new來構造,還可以通過傳入auto_ptr, unique_ptr,weak_ptr來構造。當我們呼叫release()時,當前指標會釋放資源所有權,計數減一。當計數等於0時,資源會被釋放。shared_ptr 是為了解決 auto_ptr 在物件所有權上的侷限性(auto_ptr 是獨佔的), 在使用引用計數的機制上提供了可以共享所有權的智慧型指標。

weak_ptr

一種不控制物件生命週期的智慧型指標, 它指向乙個 shared_ptr 管理的物件. 進行該物件的記憶體管理的是那個強引用的 shared_ptr. weak_ptr只是提供了對管理物件的乙個訪問手段。weak_ptr 設計的目的是為配合 shared_ptr 而引入的一種智慧型指標來協助 shared_ptr 工作, 它只可以從乙個 shared_ptr 或另乙個 weak_ptr 物件構造, 它的構造和析構不會引起引用記數的增加或減少。weak_ptr是用來解決shared_ptr相互引用時的死鎖問題,如果說兩個shared_ptr相互引用,那麼這兩個指標的引用計數永遠不可能下降為0,資源永遠不會釋放。它是對物件的一種弱引用,不會增加物件的引用計數,和shared_ptr之間可以相互轉化,shared_ptr可以直接賦值給它,它可以通過呼叫lock函式來獲得shared_ptr。

C 學習筆記 STL(標準模板庫)

1 首先 需要學習c 模板的概念 2 c stl 標準模板庫 是一套功能強大的 c 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量 鍊錶 佇列 棧。3 c 標準模板庫的核心包括以下三個元件 元件描述 容器 containers 容器是用來管理某一類...

C 標準模板庫(STL)(二)

標頭檔案 include using namespace std 定義 map可以將任何基本型別對映到任何基本型別 內第乙個是鍵的型別,第二個為值的型別 map mp 如果是字串到整形的對映,必須用string而不是char陣列,因為char陣列作為陣列,是不能當作鍵值的 mapint mp 訪問 ...

C 學習筆記36 標準模板庫STL

泛型程式設計 1 c 語言的核心優勢之一就是便於軟體重用 2 c 中有兩個方面體現重用 1 物件導向的思想 繼承和多型,標準類庫 2 泛型程式設計的思想 模板機制,以及標準模板庫stl3 簡單的說就是使用模板的程式設計法。4 將一些常用的資料結構 比如鍊錶,陣列,二叉樹 寫成類模板 和演算法 比如排...