c++ remove_if


#include <algorithm>

函數remove_if()移除序列[start, end)中所有應用於謂詞p返回true的元素.

此函數返回一個指向被修剪的序列的最后一個元素迭代器.

記住, remove_if()並不會實際移除序列[start, end)中的元素; 如果在一個容器上應用remove_if(), 容器的長度並不會改變(remove_if()不可能僅通過迭代器改變容器的屬性), 所有的元素都還在容器里面. 實際做法是, remove_if()將所有應該移除的元素都移動到了容器尾部並返回一個分界的迭代器. 移除的所有元素仍然可以通過返回的迭代器訪問到. 為了實際移除元素, 你必須對容器自行調用erase()以擦除需要移除的元素. 這也是erase-remove idiom名稱的由來:

container.erase(remove_if(container.begin(), container.end(), pred), container.end());

remove_if()類似於partition(), 但有兩點不同: 1) 它們使用的謂詞條件剛好相反. 2) remove_if只強調前面部分(第二部分不再需要了)

remove_if()以線性時間(linear time)運行.

remove_if()不能用於關聯容器如set<>或map<>.

 

以下代碼的執行結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM