C STL中的容器

2021-09-13 00:10:19 字數 2857 閱讀 3672

用c++寫資料結構習題也有一段時間了,不得不說stl容器對資料結構真的很有用。

c++ stl(standard template library,標準模板庫)是一套功能強大的 c++ 模板類,其中包含4個元件,分別為演算法、容器、函式、迭代器。
所以想總結一下自己用的容器,為什麼要用它以及怎麼用?

c/c++原生的陣列最討厭的就是——每次定義乙個陣列之前,我都要規定好它的大小。

然而天知道我的陣列到底會存放多少內容,所以,為了能讓我的陣列大小夠用,不得不把陣列寫得足夠大,如下:

int a[9999];
剛學c語言時我的陣列經常就是這樣定義的,用醜而low來形容一點也不為過,我相信不少人到現在也是這樣寫的。

直到遇上了vector,它的第乙個吸引我的地方就是——不用再為分配陣列大小而困擾了,它是一種動態陣列,簡單來說就是想要什麼時候有多大就有多大的陣列(如果你機器的記憶體足夠大)

需要引的標頭檔案:#include

注意:引完標頭檔案後需要using namespace std;

1.基本用法:

// 定義

int old[10]; // 傳統定義陣列的方法

vectornew; // 定義的大小為0的vector容器

// 新增元素

old[0] = 1;// 將陣列0號位置元素賦值為1

new.push_back(1);// 向vector最後新增乙個資料為1的元素

// 讀取元素

cout << old[0];

cout << new[0];

// 修改元素

old[0] = 10;

new[0] = 10;

// 刪除最後乙個元素

new.pop_back();

可以看到,vector的讀取和修改資料元素和陣列的操作還是一樣的。

2.常用操作

預備知識:

vectornew(10);// 定義乙個大小為10的vector容器

vector::iterator it = new.begin();// 定義乙個vector容器的迭代器,初始迭代項為第乙個元素

這裡的迭代器,相當於指向容器某個元素的乙個指標,相當於如下語句:

int old[10];

int * it = old;

只有理解了迭代器的概念,下面的操作才能會用

例如,容器內此時有三個資料:1, 3, 5,利用上面定義迭代器,可以實現如下操作:

// 向指定位置前插入元素

new.insert(it + 1, 10);

結果容器中的元素變為:1, 10, 3, 5

// 刪除指定位置元素

new.erase(it + 2);

結果容器中的元素變為:1, 10, 5

// 使用下標遍歷

for(int i = 0; i < new.size(); i++)

// 使用迭代器遍歷

for(;it != new.end(); it++)

容器的資料元素不光可以是int,double,char這些基本資料型別,也可以是結構體,類,如下:

class teacher

;vectorteachers;

在寫哈夫曼編碼時,需要將符號和對應的編碼一一對應存放,例如'a'=>01,'b'=>001等,在不知道map以前,要實現這樣的一一對應,有這樣兩種思路:

定義兩個陣列,通過下標一一對應

新建乙個物件陣列,每個物件中都有character和code這兩個屬性

但是無論是哪種,在定義和使用上都存在一定的不方便。

如果你還記得thinkphp5的教程,那你一定對陣列這樣的用法並不陌生:var_dump(teacher['id'])

map就可以讓陣列實現這樣的一一對應:

需要引的標頭檔案:#include

1.基本用法

maphafucode;// 宣告乙個鍵為char型別,值為string型別的map容器
簡單解釋一下鍵(key)和值(value),以這條語句為例teacher['a'] = 01,中的就是鍵,而01就是值,兩者一一對應

// 單個插入資料

hafucode['a'] = "01"; // 向容器內插入鍵為'a',值為"01"的鍵值對

// 讀取資料

cout << hafucode['a']; // 輸出結果為01

// 根據鍵查詢,找到返回指向該鍵的迭代器,否則返回指向end的迭代器

map::iterator it;

it = hafucode.find('a');

// 修改資料

hafucode['a'] = "00";

// 刪除鍵為a的元素

hafucode.erse('a');

其他操作與vector大同小異,在此不做贅述。

stl的容器除了vector和map,還有list,set,deque,queue,stac等等,只要掌握了其中一兩個容器的用法,其他容器的操作也就很容易就上手了

善用stl中的各種容器及演算法,會極大地簡化程式的設計,而把主要精力用於演算法的實現上來。

c STL中的容器

容器作為stl的重要組成部分,其主要包括兩大類 順序容器 和 關聯容器 雖說這二者都是用來儲存資料的資料結構,但是他們的底層實現和特長有很大差別 關聯容器有8種 1 map 紅黑樹 2 set 紅黑樹 3 multimap 紅黑樹 4 multiset 紅黑樹 5 unordered map 雜湊表...

C STL中的容器簡介

c stl中提供了強大的容器 containers 來替代程式中常用的資料結構,主要包括 字串 string 動態陣列 vector 佇列 queue 棧 stack 堆 priority queue 鏈結表 list 集合 set 字典 map 使用這些容器可以極大的簡化程式的編寫,提高程式設計的...

C STL中的容器 Vector

c stl中的verctor好比是c語言中的陣列,但是vector又具有陣列沒有的一些高階功能。與陣列相比,vector就是乙個可以不用再初始化就必須制定大小的邊長陣列,當然了,它還有許多高階功能。要想用vector首先得包含標頭檔案vector。如果vector的元素型別是int,預設初始化為0 ...