順序容器
容器介面卡
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函式後,容器大小變...