std::remove_if 介紹

Augusdi發表於2017-03-16

remove_if  可以這樣理解

前兩個引數:

  給他一個迭代的起始位置和這個起始位置所對應的停止位置。  例如下方函式中的  str.begin(),  str.end()

最後一個引數:

  傳入一個回撥函式,如果 回撥函式函式返回真,則將當前所指向的引數,移到尾部(不穩定的資料移動)例如 下方的 Lambda 表示式  如果  n == find_str 這條命題為真則執行操作。

返回值:

  被移動區域的首個元素 iterator


這個函式不負責刪除工作。所以他一般與 erase 成對出現

// list::front
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main ()
{
  std::vector<std::string> str = { "Name", "1", "2", "3 ", "4", "5", "6", "7", "Name"};  
  for(auto& name : str) {
      std::cout << name << std::endl;
  }
  auto find_str = "Name";  
  std::cout << "============================" << std::endl;
#if 0  
  auto sd = std::remove_if(str.begin(), str.end(), [find_str](std::string n) { return n == find_str; });  
  str.erase(sd, str.end());  
#else  
  str.erase(std::remove_if(str.begin(), str.end(),   
      [find_str](std::string n) { return n == find_str; }),  
      str.end());  
#endif
  std::for_each(str.begin(), str.end(), [](std::string name) {std::cout << name << std::endl;});


  return 0;
}