C++ 从向量'中删除特定元素;s范围

C++ 从向量'中删除特定元素;s范围,c++,vector,stl,stdvector,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_ba

如果元素的值与字符串“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;
}
正在寻找下面这样的东西,但不存在

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

那么,如何以更少的复杂性实现它呢

您应该使用std::remove\u,如果是这样的话:

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

如果如下所示,则应使用std::remove\u:

myvector.erase(std::remove_if(myvector.begin(), myvector.end(), [](const std::string& string){ return (string == "empty"); }), myvector.end());
std::vector myvector;
myvector.push_back(“值”);
myvector.push_back(“值”);
myvector.push_back(“空”);
myvector.push_back(“值”);
myvector.push_back(“值”);
myvector.push_back(“空”);
myvector.push_back(“空”);
auto it=std::remove_if(myvector.begin(),myvector.end(),
[](const std::string&s)
{ 
返回(s=“空”);
});
擦除(it,myvector.end());
  • 使用
    remove\u if
    将所有找到的
    “empty”
    放在
    向量的末尾
  • 使用返回的
    迭代器
    删除它们
  • std::vector myvector;
    myvector.push_back(“值”);
    myvector.push_back(“值”);
    myvector.push_back(“空”);
    myvector.push_back(“值”);
    myvector.push_back(“值”);
    myvector.push_back(“空”);
    myvector.push_back(“空”);
    auto it=std::remove_if(myvector.begin(),myvector.end(),
    [](const std::string&s)
    { 
    返回(s=“空”);
    });
    擦除(it,myvector.end());
    
  • 使用
    remove\u if
    将所有找到的
    “empty”
    放在
    向量的末尾
  • 使用返回的
    迭代器
    删除它们

  • 查看查看无需在此处使用
    std::remove_if
    和lambda,为什么不使用
    std::remove
    “empty”
    ?无需在此处使用
    std::remove_if
    和lambda,为什么不使用
    std::remove
    “empty”
        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");
        auto it = std::remove_if(myvector.begin(), myvector.end(), 
        [](const std::string& s)
        { 
            return (s== "empty"); 
        });
        myvector.erase(it, myvector.end());