stl 各種刪除

2022-09-08 18:12:08 字數 1945 閱讀 6356

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