Cpp STL中的資料結構

2022-08-22 11:36:14 字數 2714 閱讀 8991

前言:

c++stl 之所以得到廣泛的讚譽,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是stl封裝了許多複雜的資料結構演算法和大量常用資料結構操作。vector封裝陣列,list封裝了鍊錶,map和set封裝了二叉樹等,在封裝這些資料結構的時候,stl按照程式設計師的使用習慣,以成員函式方式提供的常用操作,如:插入、排序、刪除、查詢等。讓使用者在stl使用過程中,並不會感到陌生。(摘自博主蔡軍帥)

下面就讓我們一起來學習stl中的那些強大的容器吧!

一、棧(stack)

1.definition :

微軟翻譯:stack—— n. 堆疊;一堆;大量;許多;v.(使)放成整齊的一疊(或一摞、一堆)。

2.標頭檔案:#include

3.定義stack型別:stacks;(其中type為資料型別:如int、float、char等)

4.correlation operation:

(1)s.push(item);  //將item壓入棧頂

(2)s.pop();   //刪除棧頂的元素,但不會返回

(3)s.top();  //返回棧頂的元素,但不會刪除

(4)s.size();  //返回棧中元素的個數

(5)s.empty();  //檢查棧是否為空,如果為空返回true,否則返回false

二、佇列(queue)

1.definition:

微軟翻譯:queue—— n. 行列;(儲存的資料)佇列;v.(人、車等)排隊等候;(使)排隊;列隊等待

2.標頭檔案:#include

3.定義queue型別:queueque;(其中type為資料型別,如int、float、char)

4.correlation operation:

(1)q.push(item);  //將item壓入佇列尾部

(2)q.pop();  //刪除隊首元素,但不返回

(3)q.front();  //返回隊首元素,但不刪除

(4)q.back();  //返回隊尾元素,但不刪除

(5)q.size();  //返回佇列中元素的個數

(6)q.empty();  //檢查佇列是否為空,如果為空返回true,否則返回false

三、動態陣列(vector)

1.definition:

微軟翻譯:vector —— n.向量;向量;載體;(航空器的)航線;v.【航】(對飛行中的飛機)指示航向;【航】電(磁)波導航

標準模板庫中的部分內容,中文偶爾譯作「容器」,但並不準確。它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。vector之所以被認為是乙個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。

2.標頭檔案:#include

3.定義vector型別:vectorvec; 

4.correlation operation:

(1)尾部插入數字:vec.push_back(a);      

(2)使用下標訪問元素:cout

vector::iterator it;

for(it=vec.begin();it!=vec.end();it++)

cout<

(6)向量大小:vec.size();

(7)清空:vec.clear();

(8)使用at()函式訪問元素:cout

1) 使用reverse將元素翻**需要標頭檔案#include

reverse(vec.begin(),vec.end());將元素翻轉,即逆序排列!

摘自:csdn博主:那年聰聰

四、set

1.definition:

微軟翻譯:n. 集;集合;一套;電視機;v. 設定;放;樹立;安排 

csdn博主蔡軍帥:關於set,必須說明的是set關聯式容器。set作為乙個容器也是用來儲存同一資料型別的資料型別,並且能從乙個資料集合中取出資料,在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。應該注意的是set中數元素的值不能直接被改變。c++ stl中標準關聯容器set, multiset, map, multimap內部採用的就是一種非常高效的平衡檢索二叉樹:紅黑樹,也稱為rb樹(red-black tree)。rb樹的統計效能要好於一般平衡二叉樹,所以被stl選擇作為了關聯容器的內部結構。

2.標頭檔案:#include

set使用方法:

begin()     ,返回set容器的第乙個迭代器

end()    ,返回set容器的最後乙個迭代器

clear()        ,刪除set容器中的所有的元素

empty()   ,判斷set容器是否為空

max_size()   ,返回set容器可能包含的元素最大個數

size()     ,返回當前set容器中的元素個數

rbegin    ,返回的值和end()相同

rend()    ,返回的值和rbegin()相同

lower_bound(key_value) ,返回第乙個大於或等於key_value的定位器

upper_bound(key_value),返回第乙個乙個大於key_value的定位器

如果找不到目標值迭代器等於end()  用upper_bound()==end()判斷即可

五、deque

資料結構中的排序

排序就是將乙個元素的任意序列重排成乙個按關鍵字有序的序列。如果使用某一排序演算法排序後,ri和rj的相對位置並未發生變化,則稱這個排序演算法是穩定的。否則就稱這個演算法是不穩定的。內部排序 在排序期間,元素全部存放在記憶體中的排序 外部排序 在排序期間元素無法全部同時存放在記憶體中,必須在排序的過程...

資料結構中的排序

在論壇上看到的 幫助理解就好 這個東西很好記得 關於內部排序的演算法的時間複雜度,空間複雜度,穩定性的記憶方法,原創哈 王道論壇上看到 1 時間複雜度 以n nlogn 的速度快希歸堆,但是太快也不好,最壞達到o n 2 這樣就記住了4個!冒泡冒的好是o n 冒得不好就是o n 2 直接插入插得好,...

Python中的資料結構

在記憶體中儲存的資料可以有多種型別。例如,乙個人的年齡可以用數字來儲存,他的名字可以用字元來儲存。python 定義了一些標準型別,用於儲存各種型別的資料。python有五個標準的資料型別 數字資料型別用於儲存數值。他們是不可改變的資料型別,這意味著改變量字資料型別會分配乙個新的物件。當你指定乙個值...