STL基本用法總結

1、vector的基本用法  #include<vector>

1)定義:

vector<int>S;定義一個空的vector對象,存儲的是int類型的元素。

vector<int>S(n);定義一個含有nint元素的vector對象。

2)基本操作:

S[i];直接以下標方式訪問容器中的元素。

S.front();返回首元素。

S.back();返回尾元素。

S.size();返回表長。

S.empty();當表爲空時返回true,否則返回false

S.pop_back();刪除表尾元素。

S.begin();返回指向首元素的迭代器。

S.end();返回指向尾元素的迭代器。

S.insert(it , x);向迭代器it指向的元素前插入新元素 x

S.insert(it , n , x);向迭代器it指向的元素前插入n個新元素x

S.insert(it , first , lase);將由迭代器firstlast所指定的序列[first , last)插入到迭代器it指向的元素前面。

S.erase(it);刪除由迭代器it指向的元素。

S.erase(first , last);刪除由迭代器firstlast所指定的序列[first , last)

S.reserve(n);預分配緩衝空間,使存儲空間至少可容納n個元素。

S.resize(n);改變序列的長度,超出的元素將全被刪除,如果序列需要擴展(原空間小於n),元素默認值將填滿擴展出的空間。

S.resize(n , val);改變序列的長度,超出的元素將全被刪除,如果序列需要擴展(原空間小n),元素val將填滿擴展出的空間。

S.clear();刪除容器中的所有元素。

S1.swap(S2);容器S1S2互換。

S.assign(first , last);將序列替換成由迭代器firstlast所指定的序列[first , last)[first , last)不能是原序列中的一部分。

 

2、stack的基本用法  #include<stack>

1)定義:

stack<int>S

stack<string>S

2)基本操作:

S.push(x)x入棧。

S.pop();出棧(刪除棧頂元素,不返回)。

S.top();訪問棧頂元素。

S.empty();判斷棧是否爲空(空時返回true,否則返回false)。

 

3、queue的基本用法  #include<queue>

1)定義:

queue<int>Q

queue<double>Q

2)基本操作:

Q.push(x)x入隊。

Q.pop();出隊(彈出隊列第一個元素,不返回)。

Q.front();訪問隊首元素。

Q.back();訪問隊尾元素。

Q.empty();判斷隊列是否爲空(空時返回true,否則返回false)。

Q.size();返回隊列中元素的個數。

 

4、priority_queue的基本用法  #include<queue>

    在<queue>頭文件中,還定義了另一個非常有用的模板類priority_queue(優先隊列)。優先隊列與隊列的差別在於優先隊列不是按照入隊的順序出隊,而是按照隊列中元素的優先權順序出隊(默認爲大者優先,也可以通過指定算子來指定自己的優先順序)。 

priority_queue模板類有三個模板參數,第一個是元素類型,第二個容器類型,第三個是比較算子。其中後兩個都可以省略,默認容器爲vector,默認算子爲less,即小的往前排,大的往後排(出隊時序列尾的元素出隊)。 

1)定義:

從大到小輸出:priority_queue<int>pq;

從小到大輸出:priority_queue<int, vector<int>, greater<int> >pq;

注意兩個尖括號之間一定要留空格。

2)基本操作:和queue相同。

(3)自定義:priority_queue<node>pq;

struct node //先按x升序,再按y升序

{

    friend bool operator< (node n1, node n2)

    {

        if(n1.x>n2.x) return true;//爲什麼是 因爲出隊是從尾部先出的

        if(n1.x==n2.x&&n1.y>n2.y) return true;

        return false;

    }

    int x,y;

}; 

 

5、map基本用法  #include<map>

1)定義:

map<string , int>m;

2)插入元素:

m[key]=value;

m.insert(make_pair(key,value));

(3)查找元素:

int i = m[key];注意:當與該鍵值匹配的值不存在時,會創建鍵值爲key的元素對。

map<string , int>::iterator it = m.find(key);如果map中存在與key相匹配的鍵值時,find操作將返回指向該元素對的迭代器,否則返回的迭代器等於mapend()

(4)刪除元素:

m.erase(key);刪除與指定key鍵值相匹配的元素對,並返回被刪除的元素的個數。

m.erase(it);刪除由迭代器it所指定的元素對,並返回指向下一個元素對的迭代器。

 

6、setmultisetmapmultimap功能相似(以set爲例)

Iterators:

begin()  end()  rbegin()  rend()

Capacity:

empty  size

Modifiers:

insert  erase    clear

swap           //set1.swap(set2) set1set2互換

Operations:

find           //it = set1.find(key)          找到返回下標,否則返回set1.end()

count          //cnt = set1.count(key)        返回set1中 key 的個數

lower_bound    //it = set1.lower_bound(key)   大於或等於 key 的最小值的下標

upper_bound    //it = set1.upper_bound(key)   大於 key 的最小值的下標

發佈了55 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章