用vector或者set刪除一億個數里的奇數

2021-06-29 11:36:42 字數 723 閱讀 6533

如何用vector或者set刪除一億個數里的奇數

先說說vector怎麼刪除指定的元素,因為vector有迭代器失效的問題,一般人都會寫這麼樣的乙個函式

for(vector::itertor it=a.begin();it!=a.end();)

這樣的函式如果資料量很小的話基本沒有什麼問題,但是如果資料量是1個億,那麼你得要執行1天的時間才能完全刪除掉,這是因為vector要動態調整,還要收縮容量。

最好的方法是erase-remove方法,這樣的話就得使用remove_if的方法來完成刪除,這種方法只需要o(n)的時間複雜度.一億個數,掃瞄一遍就可以了。

#include#include#includeusing namespace std;

bool badvalue(unsigned int x)

void main()

差不多1s的時間就刪除掉了所有的奇數。。

remove的原理是把舊容器滿足條件的值乙個乙個複製到新容器中,返回最後乙個滿足條件值的下乙個位置,並且新容器和舊容器其實是同乙個容器。

如果是set的話用上面的方法也完全可以,因為set是一顆紅黑樹,刪除效率為o(logn),比使用remove方法的vector還要快。

C 用vector實現set的功能

判斷是否是重複的元素,不重複的才放入vector vector vec words set set words string word while cin word set words.insert word find函式的用法 用於在指定範圍內查詢和目標元素值相等的第乙個元素 nputiterat...

C 中vector和set刪除一億個數字中的奇數

先貼 再解釋 include include include include using namespace std const unsigned int num 100000000 void removeodd1 vector a else bool isodd unsigned int x el...

vector中刪除乙個元素

例如 class classa vector class vector 如果要刪除第三個,似乎只能按著下面這個方式進行 class vector.erase class vector 2 這種方法太麻煩了比如我要刪最後乙個 class vector.erase class vector class ...