c++順序容器的操作
一、容器定義的型別的別名
所有容器都提供的類型別名 |
|
size_type |
無符號整型,足以儲存容器型別的最大可能容器長度 |
iterator |
容器的迭代器型別 |
const_iterator |
容器的只讀迭代器型別 |
reverse_iterator |
按逆序定址元素的迭代器型別 |
const_reverse_iterator |
元素的只讀逆序迭代器 |
difference_type |
足夠儲存兩個迭代器差值的有符號整型,可為負數 |
value_type |
元素型別 |
reference |
元素的左值型別,是value_type&的同義詞 |
const_reference |
元素的常量左值型別,等效於constvalue_type& |
const list<int>::size_type list_size = 100;
list<string>::iterator iter;
三、容器的成員
容器的begin和end成員 |
|
c.begin() |
返回一個迭代器,它指向容器c的第一個元素 |
c.end() |
返回一個迭代器,它指向容器c的最後一個元素的下一位置 |
c.rbegin() |
返回一個逆序迭代器,它指向容器c的最後一個元素 |
c.rend() |
返回一個逆序迭代器,它指向容器c的第一個元素前面的位置 |
四、容器的新增操作
在順序容器中新增元素的操作 |
|
c.push_back() |
在容器c的尾部新增值為t的元素。返回void型別 |
c.push_front() |
在容器c的前端插入值為t的元素。返回void型別。 只適用於list和deque容器型別。 |
c.insert(p,t) |
在迭代器p所指向的元素前面插入值為t的新元素,返回指向新新增元素的迭代器。 |
c.insert(p,n,t) |
在迭代器p所指向的元素前面插入n個值為t的新元素,返回void |
c.insert(p,b,e) |
在迭代器p所指向的元素前面插入迭代器b和e標記的範圍內的元素,返回void。 |
五、容器的大小操作
所有容器都提供的大小操作 |
|
c.size() |
返回容器c中的元素個數。返回型別為c::size_type |
c.max_size() |
返回容器c可容納的最多元素個數,返回型別為c::size_type |
c.empty() |
返回標記容器大小是否為0的布林值 |
c.resize(n) |
調整容器c的長度大小,使其能容納n個元素,如果n<c.size(),則刪除多出來的元素;否則,新增採用值初始化的新元素 |
c.resize(n,t) |
調整容器c的長度大小,使其能容納n個元素。所有新新增的元素值都為t |
六、訪問容器的操作
訪問順序容器內元素的操作 |
|
c.back() |
返回容器c的最後一個元素的引用,如果c為空,則該操作未定義 |
c.front() |
返回容器c的第一個元素的引用,如果c為空,則該操作未定義 |
c[n] |
返回下標n的元素的引用,如果n<0或n>=c.size(),則該操作未定義 只適用於vector和deque容器 |
c.at(n) |
返回下標為n的元素的引用,如果下標越界,則該操作未定義 只適用於vector和deque容器 |
七、刪除操作
刪除順序容器內元素的操作 |
|
c.erase(p) |
刪除迭代器p所指向的元素 返回一個迭代器,它指向被刪除元素後面的元素。如果p指向容器內的最後一個元素,則返回的迭代器指向容器的超出末端的下一位置。 如果p本身就是指向超出末端的下一位置的迭代器,則該函式未定義 |
c.erase(b,e) |
刪除迭代器b和e所標記的範圍內所有的元素 返回一個迭代器,它指向被刪除元素段後面的元素。 如果e本身就是指向超出末端的下一位置的迭代器,則返回的迭代器也指向容器的超出末端的下一位置 |
c.clear() |
刪除容器c內的所有元素。返回void |
c.pop_back() |
刪除容器c的最後一個元素。返回void。如果c為空容器,則該函式未定義 |
c.pop_front() |
刪除容器c的第一個元素。返回void。如果c為空容器,則該函式未定義 只適用於list或deque容器 |
八、賦值和swap操作
順序容器的賦值與swap操作 |
|
c1= c2 |
刪除容器c1的所有元素,然後將c2的元素複製給c1。 c1和c2的型別(包括容器型別和元素型別)必須相同 |
c.assign(b,e) |
重新設定c的元素:將迭代器b和e標記的範圍內所有的元素複製到c中。b和e必須不是指向c中元素的迭代器 |
c.assign(n,t) |
將容器c重新設定為儲存n個值為t的元素 |
c1.swap(c2) |
交換內容:呼叫完該函式後,c1中存放的是c2原來的元素,c2中存放的則是c1原來的元素。c1和c2的型別必須相同。 該函式的執行速度通常要比將c2複製到c1的操作快 |
九、vector屬性
功能 |
|
capaticy |
獲取容器在需要重新分配空間之前,能夠儲存的元素總數 |
size |
目前儲存的元素個數 |
reserve |
還剩餘多少個位置空間 |
十、容器的選擇
理論情況下:vector容器都是最佳的容器
十一、容器的介面卡
容器介面卡是讓一種已存在的容器型別採用另一種不同的抽象型別的工作方式實現
比如,棧介面卡可以讓任何一種順序容器以棧的方式工作
1、介面卡有 stack,priority_queue,stack
介面卡 |
預設所基於容器 |
stack |
預設是deque,可以建立在vector,list,或者deque |
queue |
預設是deque,只能是list |
priority |
vector,只能是vector或queue |
2、介面卡通用的操作和型別
介面卡通用的操作和型別 |
|
size_type |
一種型別,足以儲存此介面卡型別的最大物件長度 |
value_type |
0 |
container_type |
基礎容器型別,介面卡在此容器型別上實現 |
Aa; |
建立一個空介面卡,命名為a |
Aa(c); |
建立一個名為a的新介面卡,初始化為c的副本 |
關係操作符 |
所有的介面卡都支援全部關係操作符:==,!=,<,<=,>,>= |
3、棧介面卡
s.empty() |
如果棧為空,則返回true,否則返回false |
s.size() |
返回棧中元素的個數 |
s.pop() |
刪除棧頂元素,但不返回其值 |
s.top() |
返回棧頂元素,但不刪除該元素 |
s.push(item) |
再棧頂壓入元素 |
4、佇列和優先佇列
佇列和優先順序佇列支援的操作 |
|
q.empty() |
如果佇列為空,則返回true,否則返回false |
q.size() |
返回佇列中元素的個數 |
q.pop() |
刪除隊首元素,但不返回其值 |
q.front() |
返回隊首元素,但不刪除該元素 該操作只適用於佇列 |
q.back() |
返回對尾元素,但不刪除該元素 該操作只適用於佇列 |
q.top() |
返回具有最高優先順序的元素值,但不刪除該元素 該操作只適用於優先順序佇列 |
q.push(item) |
對於queue,在隊尾插入一個新的元素, 對於priority_queue,在基於優先順序的適當位置插入新元素 |