2013-08-30 33 views
0

例如:C++,stl。從矢量<string>中刪除具體值?

vector<string> strs; 
strs.push_back("1"); 
strs.push_back("2"); 
strs.push_back("3"); 
strs.push_back("4"); 
strs.push_back("3"); 

//strs.removeAllOccurencesOfValue("3"); 

我發現這個例子:

link

但是否有任何更簡單的方法?例如使用boost框架?

+1

我確定有一些現有[算法](http://en.cppreference.com/w/cpp/algorithm)[刪除](http:// en.cppreference.com/w/cpp/algorithm/remove)集合中的值。 –

+0

['std :: remove'](http://en.cppreference.com/w/cpp/algorithm/remove)。具體來說,請看例子。 – BoBTFish

回答

4

有一個完美的罰款Erase-remove idiom

#include <algorithm> 

strs.erase(std::remove(strs.begin(), strs.end(), std::string("3")), strs.end()); 
+0

我想你想要'3'附近的引號,如果它是一個字符串... –

+0

@MatsPetersson謝謝,我以爲我看到了在某處的插入矢量... – jrok

+0

謝謝,我的錯誤是我用remove_if而不是刪除。通常預定義的「刪除」功能/方法意味着刪除一個具體的範圍,而不是一個具體的值 – user2083364

1

斯科特邁爾斯有關Erase-remove idiom會談,他有效STL:50層具體的方法來提高你的標準模板庫使用。它看起來對你的情況非常完美:

#include <algorithm> // for std::remove 

vector<string> strs; 
strs.push_back("1"); 
strs.push_back("2"); 
strs.push_back("3"); 
strs.push_back("4"); 
strs.push_back("3"); 

strs.erase(std::remove(strs.begin(), strs.end(), "3"), strs.end());