C STL容器的理解

2021-07-06 11:26:05 字數 4158 閱讀 1976

1.容器=資料結構+演算法。相當於是為複雜的資料設計一種專門用於存放該資料的東西。用於開發中傳遞複雜的資料。

2.模板函式只能寫在標頭檔案中,不能單獨宣告。

3.stl容器分為三類:

(1).順序容器類

vector 陣列。查詢快,插入慢。加入的資料與資料大小有關

操作: empty() – 返回bool型,表示vector是否為空

(v.empty() )

size() – 返回vector內元素個數 (v.size() )

push_back(data_type a) 將元素a插入最尾端

pop_back() 將最尾端元素刪除 v[i] 類似陣列取第i個位置的元素(v[0] )

#include 

#include

#include

using

namespace

std;

int main()

cout

<< "size: "

<< a.size() << endl;

a.pop_back();

a[0] = 1;

cout

<< "size: "

<< a.size() << endl;

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

cout

<< endl;

return

0; }

deque 陣列。採用雜湊對映。

list 鍊錶 。插入快,查詢慢。

(2).關聯式容器

與順序容器的最大區別為:容器類的東西與加入順序無關,在插入時就會排序。

set 元素不能重複

multiset 可以重複

操作: s.insert(elem) – 安插乙個elem副本,返回新元素位置。 s.erase(elem) – 移除與elem元素相等的所有元素,返回被移除 的元素個數。 s.erase(pos) – 移除迭代器pos所指位置上的元素,無返回值。 s.clear() – 移除全部元素,將整個容器清空。

#include 

#include

#include

using

namespace

std;

int main()

cout

<< "find:"

<< endl;

iter1 = s1.find("abc");

if(iter1 != s1.end()) else

return

0;}

#include 

#include

#include

using

namespace

std;

struct t1

};int main();

t1 tt;

tt.key=5;

tt.value1=22;

tt.value2=88;

s.insert(t);

s.insert(tt);

cout

<< "iterate:"

<< endl;

for (iter1 = s.begin(); iter1 != s.end(); iter1++)

cout

<< "find:"

<< endl;

iter1 = s.find(t);

if(iter1 != s.end()) else

return

0;}

操作: s.size() – 返回容器大小。 s.empty() – 返回容器是否為空。 s.count(elem) – 返回元素值為elem的元素的個數。 s.lower_bound(elem) – 返回elem的第乙個可安插的位置。 也就是「元素值》= elem的第乙個元素位置」。 s.upper_bound(elem) – 返回elem的最後乙個可安插的位置。 也就是「元素值 > elem的第乙個元素的位置」。 以上位置均為乙個迭代器。 s.begin() – 返回乙個雙向迭代器,指向第乙個元素。 s.end() – 返回乙個雙向迭代器,指向最後乙個元素的下一 個位置

map 儲存有序,根據鍵來排序,不能重複

multimap 與map相同,可以重複

操作: m.size() 返回容器大小

m.empty() 返回容器是否為空

m.count(key) 返回鍵值等於key的元素的個數

m.lower_bound(key) 返回鍵值等於key的元素的第乙個可安插 的位置

m.upper_bound(key) 返回鍵值等於key的元素的最後乙個可安 插的位置

操作: m.begin() 返回乙個雙向迭代器,指向第乙個元素。 m.end() 返回乙個雙向迭代器,指向最後乙個元素的下乙個 位置。 m.clear() 講整個容器清空。 m.erase(elem) 移除鍵值為elem的所有元素,返回個數,對 於map來說非0即1。 m.erase(pos) 移除迭代器pos所指位置上的元素。 直接元素訪問: m[key] = value; 查詢的時候如果沒有鍵值為key的元素,則安插乙個鍵值為key的新元素,實值為預設(一般0)。

#include 

#include

#include

using

namespace

std;

int main()else

cout

<< "iterate"

<< endl;

for(m2i = m2.begin(); m2i != m2.end(); m2i++)

return

0;}

(3).容器介面卡

stack

操作: empty() – 返回bool型,表示棧內是否為空 (s.empty() )

size() – 返回棧內元素個數 (s.size() )

top() – 返回棧頂元素值 (s.top() )

pop() – 移除棧頂元素(s.pop(); )

push(data_type a) – 向棧壓入乙個元素 a(s.push(a); )

#include 

#include

#include

using

namespace

std;

int main()

else return

0; }

queue(佇列,先進先出)

標頭檔案: #include

操作: empty() – 返回bool型,表示queue是否為空 (q.empty() )

size() – 返回queue內元素個數 (q.size() )

front() – 返回queue內的下乙個元素 (q.front() )

back() – 返回queue內的最後乙個元素(q.back() )

pop() – 移除queue中的乙個元素(q.pop(); )

push(data_type a) – 將乙個元素a置入queue中(q.push(a); )

#include 

#include

#include

using

namespace

std;

int main()

priority_queue(優先佇列)

乙個擁有權值觀念的queue,自動依照元素的權值排列,權值最高排在前面。預設情況下,priority_queue是利用乙個max_heap完成的

操作: q.push(elem) 將元素elem置入優先佇列 q.top() 返回優先佇列的下乙個元素 q.pop() 移除乙個元素 q.size() 返回佇列中元素的個數 q.empty() 返回優先佇列是否為空.

#include 

#include

#include

using namespace std

;#define pow2(a) ((a)*(a))

#define dist2(x, y) (pow2(x) + pow2(y))

struct coord

};int main()

c STL 容器 聯合容器

stl提供了四種聯合容器 set,multiset,map,multimap set and multiset在標頭檔案 map and multimap在標頭檔案 模板函式都一樣的 set map中迭代器不能 或 因為不是連續的序列,是樹。set 在set中,值就是關鍵字,集合中不會有多個相同的關...

C STL中的容器

用c 寫資料結構習題也有一段時間了,不得不說stl容器對資料結構真的很有用。c stl standard template library,標準模板庫 是一套功能強大的 c 模板類,其中包含4個元件,分別為演算法 容器 函式 迭代器。所以想總結一下自己用的容器,為什麼要用它以及怎麼用?c c 原生的...

c STL中的容器

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