一文帶你瞭解C++STL

目錄

一、順序和關聯容器共同支持的成員函數

二、vector

  1. vector的構造

  2. 賦值操作

  3. 直接訪問向量元素

  4. vector向量的常用操作

二、list

  1. 鏈表的構造(模板參數T是鏈表的數據類型)

  2. 鏈表賦值

  3. 鏈表存取

  4. 鏈表插入和刪除

  5. 鏈表的特殊操作

三、stack

主要操作

一、順序和關聯容器共同支持的成員函數

begin() 指向第一個元素

end() 指向最後一個元素

erase() 刪除容器中的一個或多個元素

rbegin() 指向按反順序的第一個元素

rend() 指向按反順序的末端位置

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

二、vector

向量容器,類似於動態數組,比數組靈活

  1. vector的構造

1 1vector c //產生一個空vector,其中沒有任何元素

2 vector c1(c2) //產生同型c2向量的一個複本(c2所有元素被複制給c1)

3 vector c(n,elem) //產生大小爲n的向量c,且每個元素都是elem

4 vector c(beg,end) //產生一個向量,並用區間[beg,end]作爲元素的初值

  1. 賦值操作

1 c1=c2 //將向量c2的元素全部賦值給c1

2 c.assign(n,e) //複製n個元素e,賦值給向量c

3 c.assign(beg,end) //將區間[beg,end]內的元素賦值給c

4 c1.swap(c2) //將c1與c2向量互換

  1. 直接訪問向量元素

1 c.at[n] //返回下標n所標識的元素,若下標越界,返 回“out_of_range”

2 c[n] //返回下標n所標識的元素,不進行範圍檢查

3 c.front() //返回第一個元素

4 c.back() //返回最後一個元素

  1. vector向量的常用操作

1 c.insert(pos,e) //在pos位置插入e的副本,並返回新元素的位置

2 c.insert(pos,n,e) //在pos位置插入e的n個副本,不返回值

3 c.insert(pos,beg,end) //在pos位置插入區間[beg,end]內的所有元素

4 c.push_back(e) //在尾部插入元素e

5 c.push_back() //刪除最後一個元素

6 c.erase(pos) //刪除pos位置的元素

7 c.erase(beg,end) //刪除區間[beg,end]內的所有元素

8 c.clear() //刪除所有元素,清空容器

9 c.size() //返回向量c中的元素個數

10 c.resize(n) //將c重新設置爲大小爲n個元素的向量,如果n比原來的元素多,則多出的元素常被初始化爲0

上述成員函數參數中涉及的位置pos都與vector的迭代器有關,要操作這些成員函數,必須定義對應向量的迭代器,並通過迭代器訪問pos指向的向量元素

二、list

雙向鏈表,可以從頭到尾或從尾到頭訪問鏈表中的節點,節點可以是任意數據類型。鏈表中節點的訪問常常通過迭代器進行。

  1. 鏈表的構造(模板參數T是鏈表的數據類型)

1 list c //建立一個空鏈表c

2 list c1(c2) //建立與c2同型的鏈表c1(c2的每個元素都被複制)

3 list c(n) //建立具有n個元素的鏈表c,元素值由默認構造函數產生

4 list c(n,e) //建立n個元素的鏈表c,每個元素的值都是e

5 list c(beg, end) //建立鏈表c,並用[beg, end]區間內的元素作初始化

6 c.~list() //銷燬鏈表c,釋放內存

  1. 鏈表賦值

1 c1=c2 //將c2鏈表的全部元素賦值給c1鏈表

2 c1.assign(n,e) //將元素e拷貝n次到c1鏈表

3 c.assign(beg,end) //將區間[beg,end]的元素賦值給c

4 c1.swap(c2) //將鏈表c1和c2的全部元素互換

  1. 鏈表存取

1 c.front() //返回第一個元素,不檢查元素存在與否

2 c.back() //返回最後一個元素,不檢查元素存在與否

  1. 鏈表插入和刪除

1 c.insert(pos,e) //在pos位置插入元素e的副本,並返回新元素的位置

2 c.insert(pos,n,e) //在pos位置插入元素e的n個副本,沒有返回值

3 c.insert(pos, beg, end) //在pos位置插入區間[ bed, end]內的全部元素

4 c.push_back(e) //在尾部追加一個元素e的副本

5 c.pop_back(e) //刪除最後一個元素

6 c.push_front(e) //在表頭插入元素e的一個副本

7 c.pop_front() //刪除第一個元素

8 c.remove(val) //刪除值爲val的元素

9 c.remove_if(op) //刪除所有“造成op(e)結果爲true”的元素

10 c.erase(pos) //刪除pos指向的元素,返回下一元素的位置

11 c.erase(beg, end) //刪除區間[beg,end]內的元素,返回下一元素位置

12 c.resize(n) //將鏈表c的大小重新設置爲n

13 c.clear() //刪除鏈表所有元素,將整個容器置空

  1. 鏈表的特殊操作

1 c.unique() //刪除相鄰重複元素,只留一個

2 c.unique(op) //若存在若干相鄰且使op()操作爲true的元素,刪除重複,只留一個

3 c1.splice(pos, c2) //將c2內的所有元素轉換到c1內,pos之前

4 c1.splice(pos, c2, c2pos) //將c2鏈表的c2pos所指元素移到c1內的pos指向的位置

5 c1.splice(pos, c2, c2beg, c2end) //將c2內[c2beg, c2end]區間的所有元素轉換到c1 內pos之前

6 c.sort() //以operator<爲準則,對所有元素排序

7 c.sort(op) //以op()爲準則,對所有元素排序

8 c1.merge(c2) //c2合併到c1,若合併前有序則合後仍有序

9 c.reverse() //將所有元素反序

三、stack

堆棧是一種較簡單的容器,是一種受限制的向量,只允許在一端存取變量

LIFO(Last in first out)

主要操作

push() //將第一個元素加入stack內,加入的元素放在棧頂

top() //返回棧頂元素元素值

pop() //刪除棧頂元素

**關注我,帶你遨遊代碼世界!

私信回覆 “資料” 獲取更多**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章