一些操作適用於所有容器類

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

順序容器

容器介面卡

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()    

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

一些同樣適用於人生的計算機原理

學了軟體工程導論和計算機網路,都是理論性很強的內容,有時未免感到乏味,可是仔細看看,書中介紹的不僅是計算機的相關理論,也在講著人生呢。1.錯誤發現與改正得越晚,所需付出的代價也越高。出自軟體工程的七條基本原理之堅持階段性評審 2.得到最廣泛應用的不是法律上的國際標準osi,而是非國家標準tcp ip...

自創 乙個 適用於任何頁面的 動畫管理類

這個動畫管理器最大的好處在於,批處理 當父級距離達到,子級自動動畫,不用再計算距離 和單個處理 精確到單個元素 而且還附帶了 附加方法 動畫執行的同時,附加方法開始執行 也就是說如果滾動到相應區域,你可以很簡單的控制部分或者全部動畫,並且每個動畫可以不同,並且如果你不想寫動畫效果,我這裡還提供了一般...

順序容器的一些操作

新增元素 1.push back 向尾部新增乙個元素,除了array與forward list不支援外,其餘順序容器皆支援 形式 c.push back t 注 把乙個物件新增到容器中,實際上放入的是物件的拷貝值而不是物件本身,隨後對容器中元素的任何改變都不會影響原始物件。2.push front ...