Effective_STL 學習筆記(四十七) 避免產生只寫代碼
阿新 • • 發佈:2018-12-03
有一個 find tor ive type 使用 rbegin pan begin
假設有一個 vector<int>,想要去掉 vector 中的值小於 x 而出現在至少和 y 一樣大的最後一個元素之後的所有元素
1 vector<int> v; 2 int x, y; 3 . . . 4 v.erase( remove_if( find_if( v.begin(), v.end(), 5 bind2nd(greater_equal<int>(), y) ).base(), // 找到比 y 大的位置 6 v.end(), bind2nd(less<int>(), x) ), v.end() );
可以使用的方法:
1 typedef vector<int>::iterator VecIntIter; 2 VecIntIter rangeBegin = find_if( v.rbegin(), v.rend(), 3 bind2nd( greater_equal<int>(), y ) ).base(); 4 v.erase( remove( rangeBegin, v.end(), 5 bind2nd( less<int>(), x ) ), v.end() );
找到 vector 中一個值最後一次出現需要用逆向叠代器調用 find 或 find_if 的某種形式
去掉元素需要使用 erase 或 erase-remove 慣用法
1 v.erase( remove_if( find_if( v.rbegin(), v.rend(), something ).base(), 2 v.end(), something ), v.end() );
Effective_STL 學習筆記(四十七) 避免產生只寫代碼