順序容器的定義

2021-06-21 14:29:22 字數 2969 閱讀 7935

順序容器

容器介面卡

vector

支援快速隨機訪問

stack

後進先出

(lifo)

list

支援快速插入/刪除

queue

先進先出

(fifo)

deque

雙端佇列

priority_queue

有優先順序管理的佇列

1、容器型別的操作集合形成了以下層次結構:

1)一些操作適用於所有容器型別;

2)另外一些操作只適用於順序或關聯容器;

3)還有一些操作只適用於順序或關聯容器型別的乙個子集。

2、容器建構函式

cc;建立乙個名為

c的空容器。

c是容器型別名,如

vector,t

是元素型別,如

int或

string

適用於所有容器

cc(c2);

建立容器

c2的副本

c;c和

c2必須具有相同的容器型別

,並存放相同型別的元素。適用於所有容器。

cc(b,e);

建立c,

其元素是迭代器b和

e標示的範圍內元素的副本。

適用於所有容器

cc(n, t);用n

個值為t

的元素建立容器

c,其中值

t必須是容器型別

c的元素型別的值

,或者是可轉換為該型別的值。

只適用於順序容器

cc(n);

建立有n

個值初始化元素的容器

c只適用於順序容器

3、將乙個容器初始化為另乙個容器的副本

將乙個容器複製給另乙個容器時,型別必須匹配:容器型別和元素型別都必須完全相同。

[cpp]view plain

copy

vector<

int> ivec;  

vector

> ivec2(ivec);  

//ok

vector

> dvec(ivec);    

//error

list

> ilist(ivec);        

//error

4、初始化為一段元素的副本

系統允許通過一對迭代器間接實現不同種容器之間進行複製:使用迭代器時,不要求容器型別相同,容器內元素型別也可以不相同,只要他們相互相容,能夠將要複製的元素轉換為所構建的新容器的元素型別,即可實現複製。

[cpp]view plain

copy

vectorsvec;  

//...

listslist(svec.begin(),svec.end());  //ok

vector::iterator mid = svec.begin() + svec.size()/2;  

dequefront(svec.begin(),mid);            //ok

dequeback(mid,svec.end());               //ok

char

*word = ;  

listslist2(word,word + sizeof

(word)/

sizeof

(*word));  

//ok

vector

> ivec;  

//...

vector

> dvec(ivec.begin(),ivec.end()); 

//ok

5、分配和初始化指定數目的元素

不提供元素初始化式時,標準庫將為該容器實現值初始化,採用這種型別的初始化,元素型別必須是內建或復合型別,或者是提供了預設建構函式的類型別。如果元素型別沒有預設建構函式,則必須顯式的指定其元素初始化式。

接受容器大小做形參的建構函式只適用於順序容器,而關聯容器不支援這種初始化。

[cpp]view plain

copy

const

list<

int>::size_type list_size = 64;  

list

> ilist(list_size);       

//ok

listslist(list_size);    //ok

liststrlist(list_size,"ha~"

); //ok

[cpp]view plain

copy

//p267 習題9.2

vectorstrvec1;  

vectorstrvec2(strvec1);  

vectorstrvec3(strvec2.begin(),strvec2.end());  

vectorstrvec4(strvec3.size());  

vectorstrvec5(strvec4.size(),"ans"

);  

6、容器內元素的約束

c++語言中,大多數型別都可用作容器的元素型別。容器元素型別必須滿足

以下兩個約束:

•元素型別必須支援賦值運算。

•元素型別的物件必須可以複製。

容器操作的特殊要求

支援複製和賦值功能是容器元素型別的最低要求。此外,一些容器操作對元素型別還有特殊要求。如果元素型別不支援這些特殊要求,則相關的容器操作就不能執行:我們可以定義該型別的容器,但不能使用某些特定的操作。

[cpp]view plain

copy

class

foo  

};  

intmain()    

有在同時指定每個元素的初始化式時,才能使用給定容器大小的建構函式來建立同型別的容器物件。

容器 順序容器

容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...

容器 順序容器 關聯容器

容器分為 順序容器 關聯容器,示意圖如下 順序容器 只儲存值,關聯容器 key value形式,關聯容器的乙個元素包含兩個部分 鍵值對 key value 有序容器 底層實現為紅黑樹,即容器內的key是有序的 無序容器 底層實現為hash table,雜湊表 區別 順序容器通過元素在容器中的位置順序...

順序容器 容器的賦值 swap assign

一 clear和erase函式會把容器的實際大小減少。void test clear erase std cout de.size std endl 5 de.erase de.begin de.end std cout de.size std endl 使用clear和erase函式後,容器大小變...