1,deque類
deque與vector類似,是乙個動態陣列,與vector不同的是它可以在陣列的開頭和結尾插入和刪除資料
#include#include#includeint main()
d.pop_back();
d.pop_front();
std::cout << "after pop:" << std::endl;
std::deque::iterator it;
for (it = d.begin(); it != d.end(); ++it)
//system("pause");
return 0;
}
2,list類
list是雙向鍊錶,和陣列相比,在任何地方插入元素都非常快,插入時間是固定的,不會隨著資料的增多而變長。
//const_iterator不能改變其所指向的元素的值,而iterator可以。
#include#includevoid printlist(std::listlst)
int main()
3,satck
stack,(堆)棧,後進先出(lifo);自適應容器(容器介面卡)不是具體的容器;無迭代器,只能在尾部運算元據。主要用在做系統軟體開發,如作業系統。
操作:s.empty(); s.size(); s.pop(); s.top(); s.push(item);
#include#include#include#includeint main()
//system("pause");
return 0;
}
4,queue
queue,佇列,先進先出(fifo),容器介面卡(自適應容器),可用deque和list做,但不能用vector做。無迭代器,只能在兩端運算元據。
操作:q.empty(); q.size(); q.front(); q.back(); q.push(); q.pop();
#include#include#include#includeint main()
if (q.empty())
std::cout << "佇列已空!" << std::endl;
//system("pause");
return 0;
}
priority_queue
priority_queue,自適應容器,不能使用list;最大、最小優先順序佇列。
操作:pq.empty(); pq.size(); pq.front(); pq.back(); pq.push(); pq.pop();
#include#includeint main()
std::cout << "--------最小值優先順序佇列--------" << std::endl;
pq_low.push(5); pq_low.push(10); pq_low.push(-1); pq_low.push(20);
std::cout << "now priority_queue size: " << pq_low.size() << std::endl;
while (!pq_low.empty())
//system("pause");
return 0;
}
5,map和multimap
map和multimap(對映/字典/關聯陣列),內部結構:紅黑樹。map中的鍵不允許重複,若重複,最先插入的鍵值對有效;multimap中鍵可以重複。
基本操作:insert; count和find; erase
#include#include#includevoid printmultimap(std::multimapmmp)
int main()
std::cout << "map簡單查詢mp[1000] = " << mp[1000] << std::endl;
std::cout << "----------multimap------------" << std::endl;
mmp.insert(std::multimap::value_type(1, "one"));
mmp.insert(std::multimap::value_type(10, "ten"));
mmp.insert(std::multimap::value_type(10, "ten"));
mmp.insert(std::make_pair(-1, "minus one"));
mmp.insert(std::pair(1000, "one thousand"));
mmp.insert(std::pair(1000, "one thousand"));
mmp.insert(std::pair(1000, "one_thousand"));
mmp.insert(std::pair(1000, "one-thousand"));
//mmp[1000000] = "one million"; multimap不能用這種方式插入元素
std::cout << "the multimap size: " << mmp.size() << std::endl; //內部結構紅黑樹,查詢非常快。
std::cout << "multimap 資料:\n";
printmultimap(mmp);
std::cout << "multimap中有" << mmp.count(1000) << "個1000:" << std::endl; //count計數
std::multimap::const_iterator cit; //find查詢
cit = mmp.find(1000);
for (int i = 0; i < mmp.count(1000); ++i)
if (mmp.erase(-1) > 0) //erase刪除,若刪除成功,返回結果大於0;
std::cout << "刪除-1後剩餘元素:" << std::endl;
printmultimap(mmp);
if (mmp.find(10) != mmp.end())
printmultimap(mmp);
mmp.erase(mmp.lower_bound(1000), mmp.upper_bound(1000));
std::cout << "刪除1000後剩餘元素:" << std::endl;
printmultimap(mmp);
//system("pause");
return 0;
}
6,set和multiset
set和multiset,set中的元素不允許重複,而multiset可以。資料結構,紅黑樹;插入(稍慢),查詢和刪除的速度都非常快。若有大量的資料,建議優先放set中,放入其中的資料會自動進行排序,且其中的元素不能修改,可先刪除在插入來實現修改。
基本操作:insert; count和find; erase
#include#includetemplate void printset(const container& mset)
int main()
STL中不同容器的刪除操作
說明 1 對於順序容器,如vector deque和string等,刪除操作應該用如下形式 vec.erase remove vec.begin vec.end 5 vec.end 2 對於list,上述1的方法也可以,但是效率的話,應該使用如下形式 alist.remove 3 3 對於關聯容器,...
STL學習筆記 2 容器的共通操作
每個容器都有很多操作,以下操作為所有容器共有的 一 構造,拷貝和析構 conttype c 建立乙個空容器,其中沒有任何元素 conttype c1 c2 建立乙個同種類形容器的乙個copy conttype c beg,end 建立乙個容器,以區間 beg,end 做為元素初值 c.conttyp...
STL學習筆記 map multimap容器
簡介 map是標準的關聯式容器,乙個map是乙個鍵值對的序列,即 key,value 提供基於key的快速檢索能力 map中key的值是唯一的。map中的元素按照一定的順序排列,元素插入是按照排序規則插入的,不能指定位置插入 map的具體實現是紅黑樹變體的平衡二叉樹資料結構。插入和刪除比vector...