c 常見容器操作

2021-07-12 04:31:41 字數 3817 閱讀 8579

總結下常見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裝置,成本高 本異地儲...