STL學習筆記 不同容器的操作

2021-09-02 22:10:18 字數 3657 閱讀 7582

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...