从矢量中删除元素,向量用struct填充

时间:2016-03-01 06:20:25

标签: c++ vector struct erase

类似的东西:

struct mystruct 
{
  char straddr[size];
  int port;
  int id;
  .......
};

mystruct s1={......};
mystruct s2={......};
mystruct s3={......};

vector test;
test.emplace_back(s1);
test.emplace_back(s2);
test.emplace_back(s3);

现在我想用straddr =" abc"擦除元素。和port = 1001。 我该怎么办? 而且我不想这样做。

    for(auto it = test.begin();it != test.end();)
   {
      if(it->port == port && 0 == strcmp(it->straddr,straddr))
         it = test.erase(it);
     else
        it++;
   }

1 个答案:

答案 0 :(得分:3)

首先,使用std::string代替char [size],以便您可以使用==代替strcmp和其他此类c字符串函数。

然后使用std::remove_if()erase()作为:

test.erase (
    std::remove_if(
        test.begin(), 
        test.end(), 
        [](mystruct const & s) { 
            return s.port == 1001 && s.straddr == "abc"; 
        }
    ), 
    test.end()
);

这是您的问题的惯用解决方案,您可以在这里阅读更多相关信息:

请注意,此解决方案将从容器中删除谓词返回true的所有元素。但是,如果事先知道最多会有一个与谓词匹配的项目,则伴随std::find_if的{​​{1}}会更快:

erase()

希望有所帮助。