c++ - 从 vector 范围中删除特定元素

标签 c++ vector stl stdvector

如果元素的值与字符串“empty”匹配,我想删除该元素,因此遍历循环但它不是那样工作的。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main ()
{
  std::vector<std::string> myvector;

  myvector.push_back("value");
  myvector.push_back("value");
  myvector.push_back("empty");
  myvector.push_back("value");
  myvector.push_back("value");
  myvector.push_back("empty");
  myvector.push_back("empty");

  int index = 0;
  for(string input: myvector){
    if(input == "empty")
        myvector.erase(myvector.begin()+index,myvector.begin()+index);
    index++;
  }

  for(string input: myvector){
    cout << input << endl;
  }
  return 0;
}

但是我们可以看到什么都没有被删除?
输出:

value
value
empty
value
value
empty
empty

正在寻找类似下面但不存在的东西

myvector.erase(myvector.begin(),myvector.end(),"empty"); 

那么如何以更简单的方式实现它呢?

最佳答案

你应该像这样使用 std::remove_if :

myvector.erase(std::remove_if(myvector.begin(), myvector.end(), [](const std::string& string){ return (string == "empty"); }), myvector.end());

关于c++ - 从 vector 范围中删除特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754740/

相关文章:

c++ - 在哪里可以查看 C++ 标准

c++ - Windows Unicode C++ 流输出失败

c++ - 通过迭代写入 std::map 的元素

c++ - 有条件地从函数返回对象类型

c++ - 寻找一组圆形数据的中位数

游戏中的 C++ 段错误

c++ - 堆栈溢出大数组但不是同样大的 vector ?

包含线程函数的对象 vector 上的 C++ 错误

c++ - 如何按值返回 "auto"返回类型函数

c++11 - 如何在基于范围的循环中从向量中删除?