#include #include#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
//template
bool delvalue(int
value)
bool delstring(char
s)template
void show(const t&stl)
}void
stldel()
;
vec.end(),3), vec.end());
vec.erase(remove_if(vec.begin(), vec.end(), delvalue), vec.end());
show(vec);
deque
deq = ;
deq.end());
deq.erase(remove_if(deq.begin(),deq.end(),delvalue ), deq.end());
show(deq);
string str = "
sstring";
's'), str.end());
str.erase(remove_if(str.begin(),str.end(), delstring),str.end());
cout
tring
//list 自帶remove
list l = ;
l.remove(3);
show(l);
//關聯容器 set map multiset multimap 不能使用remove 直接使用erase
}//當刪除是需要do something時,remove erase 滿足不了,
//可以for 迴圈,但注意迭代器是否失效
//template
void assocstl(map&mapdemo)
else
}for(auto mapitem : mapdemo)
}void seqstl(vector&vec)
else
}show(vec);
}void
delwithdosomething()
; seqstl(vec);
}int
main()
總結:1
. 要刪除容器中特定值的所有物件:
如果是vector
string deque ,使用erase+remove(remove_if);
如果是list,使用list::remove(remove_if);
如果是關聯容器使用其erase或 remove_copy_if+swap
2. 迭代器失效
如果是序列容器或者string,記住每次呼叫erase時,要用它的返回值更新迭代器
if(delvalue(*i))
else
如果是關聯容器時,記住當把迭代器傳給erase時,要對迭代器做字尾遞增;
if(delvalue((*i).first))
else
STL 各種容器
c stl 的實現 1.vector 底層資料結構為陣列 支援快速隨機訪問 2.list 底層資料結構為雙向鍊錶,支援快速增刪 3.deque 底層資料結構為乙個 控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾 中間不能 快速增刪,也支援隨機訪問 4.stack 底層一般用23實現,封...
STL各種容器的區別
容器名名稱 資料結構 效能備註 string 通用字串庫 連續存放的記憶體塊 有保留記憶體 堆中分配記憶體 高效率的隨機訪問 o 1 的訪問時間 在最後增加元素時,一般不需要分配記憶體空間,速度快 在中間或開始操作元素時要進行記憶體拷貝效率低 支援操作 vector 通用向量 陣列 庫 變長一維陣列...
stl版的各種模板
最近學stl的時候就想把以前需要手操資料結構的模板再寫一遍 話不多說,模板慢慢更新,先從拓撲排序開始。臨接表的拓撲 include include include include include include include using namespace std queue dui const ...