總結下常見c++容器操作。
vector是陣列,list 是雙端鍊錶,deque時雙向佇列。分別引入vector/list/deque庫。
vector、deque支援隨機訪問和迭代器偏移,list、deque支援雙向訪問,list只能自加自減。
增
push_back、insert
push_front 【vector不可用】
resize 【list不可用】
刪
pop_back、erase
pop_front 【vector不可用】
resize 【list不可用】
查
下標、迭代器 【list不可用下標】
front、back 【vector不可用front】
演示如下:
//vector -- 陣列
//list -- 雙端鍊錶 多了些自己的merge、split、find操作
//deque --雙向佇列
void vectorandlistshow()
//erase-刪除,注意更新迭代器
vector::iterator iter = v.begin();
iter = v.erase(iter);//刪除後迭代器返回的是下乙個元素,此時要更新迭代器
cout << "first value after delete:" << *iter //push_front/push_back-前增
l.push_front(10);
l.push_front(12);
l.push_front(13);
l.push_front(14);
for (list::iterator iter=l.begin(); iter != l.end(); iter++)//只能用!=,不能用<
cout << endl;
//front/back-訪問首尾
cout << l.front() << endl;
}
這三種容器都是前面敘述的容器的包裝容器,stack、queue預設使用deque實現,priority_queue預設使用vector實現,分別引入stack和queue庫。可以更換預設的包裝容器。
【a】.stack-後進(push)先出(pop)
支援push/pop/top/empty
如下,使用list容器來實現stack
//stack-後進(push)先出(pop)
stack> s;//注意裡面的<>和外面的<>分離
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
while(!s.empty())
【b】.queue-先進(push)先出(pop)
支援push/pop/front/top/empty
如下
//queue-先進(push)先出(pop)
queueq;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
while(!q.empty())
【c】.priority_queue-支援優先順序的佇列,可以自定義優先順序
支援push/pop/top/empty
如下,實現數字越小則優先順序越高,越先輸出的佇列
priority_queue, less> pq;
pq.push(18);
pq.push(22);
pq.push(31);
pq.push(48);
pq.push(52);
while(!pq.empty())
本質上map和set都是hash實現,可以實現複雜度為o(1)的查詢和插入複雜度,分別引入map和set庫。
【a】.map和set基本操作
支援 insert/erase/count/find
演示如下:
mapm;
//下標操作,沒有的會新建
for (int i=0; i<4; i++)
//直接插入,make_pair需要引入ulity庫
m.insert(make_pair(11, "11"));
m.insert(make_pair(12, "12"));
m.insert(make_pair(13, "13"));
m.insert(make_pair(14, "14"));
//遍歷輸出
for (map::iterator iter=m.begin(); iter!=m.end(); iter++)
//刪除
int ncnt = m.erase(11);//刪除鍵值為11的,返回值為本次刪除的元素個數,一定是1
cout << ncnt << endl;
map::iterator delend = m.begin();
delend++;//delend不能加,只能自增
m.erase(m.begin(), delend);//只刪除,不返回值
//查詢
int n = m.count(13);//對應值的個數,0或1
cout << "the count of 13 is:" << n << endl;
map::const_iterator iter = m.find(13);//返回對應元素的迭代器
cout << iter->first << "find is" << iter->second.c_str() << endl;
//set 和map類似,用於記錄單一資料,快速查詢
sets;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(4);
cout << s.count(5) << endl;
【b】.multimap和multiset
對於multimap和multiset,可存在多個相同的key
相同的key在儲存上位置一定是連續的,因此才有如下3種訪問指定key元素的方法:
//指定值的全部元素 find+count
multimap::iterator iterfind = mm.find(3);
for (int i=0; ifirst << "==>>" << iterfind->second << endl;
} //指定值的全部元素 lower_bound和upper_bound
multimap::iterator iterbegin = mm.lower_bound(3);
multimap::iterator iterend = mm.upper_bound(3);
while (iterbegin!=iterend)
//指定值的全部元素 equal_range
pair::iterator,multimap::iterator> iterpos = mm.equal_range(3);
while (iterpos.first!=iterpos.second)
c 常見容器操作
總結下常見c 容器操作。1.vector list和 deque vector是陣列,list 是雙端鍊錶,deque時雙向佇列。分別引入vector list deque庫。vector deque支援隨機訪問和迭代器偏移,list deque支援雙向訪問,list只能自加自減。增push bac...
C 中STL標準模板庫的常見容器
stl是stand template library縮寫,也標準模板庫,由惠普實驗室提供。分為以下內容 容器 常用的一些資料結構,可以存放任何資料型別。演算法 一些常用的演算法,如 查詢 排序 比較 交換,拷貝。迭代器 幫助使用容器的工具,使用方式與指標類似。1 迭代器 實現了 和 運算子的類物件,...
幾種常見容災方案對比
幾種常見容災方案對比 專案 陣列型容災 dataguard 第三方資料庫複製 cdp容災 技術架構 基於儲存的硬體複製 oracle 自身容災機制 日誌複製技術 基於儲存網路的資料複製 硬體成本 採購儲存和同步軟體,成本高 只需採購主機 儲存 成本低 採購第三方軟體 採購cdp裝置,成本高 本異地儲...