remove if詳解,配合erase

2021-07-24 21:59:03 字數 1097 閱讀 9318

#include 

forward_iterator remove_if( forward_iterator start, forward_iterator end, predicate

p );

函式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());
vector

vt;

int arr[9] = ;

vt.assign(arr,arr+9);

vector

::iterator pos;

pos = remove_if(vt.begin(),vt.end()),compose2(logical_and(),bind2nd(greater(),4),bind2nd(less(),7))); //刪除比4大且比7小的數

vt.erase(pos,vt.end()); //全部移動到末尾了

//結果1,2,3,4,7,8,9

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

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

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

STL常見用法整理 remove if

remove if 操作是把符合要求的放在容器的末尾,而不是直接刪除。說明 remove if 演算法從範圍移除所有元素 首先,最後乙個 導致謂詞以返回 true。它返回乙個迭代器等於最後乙個 n,其中 n 移除的元素數。該範圍的最後乙個的 n 個元素具有未定義值。容器的大小保持不變。主要是 rem...

Java集合中removeIf的使用

在jdk1.8中,collection以及其子類新加入了removeif方法,作用是按照一定規則過濾集合中的元素。這裡給讀者展示removeif的用法。首先設想乙個場景,你是公司某個崗位的hr,收到了大量的簡歷,為了節約時間,現需按照一點規則過濾一下這些簡歷。比如這個崗位是低端崗位,只招30歲以下的...

EasyUI Tree box 配合後台

1 function 13 node.children data 14root.push node 15 first false 16 return root 17 else 20 21 onclick function node 27 28 以上是js loadfilter 載入過濾實現的是在,在...