从矢量中擦除元素,并向量填充结构

Erase element from vector,and the vector is fill with struct

本文关键字:向量 填充 结构 元素 擦除      更新时间:2023-10-16

像这样:

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" 和端口 = 1001 擦除元素。我该怎么办?我不想这样做。

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

首先,使用 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()
);

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

  • C++ 成语/擦除删除

请注意,此解决方案将从谓词返回的容器中删除所有元素 true 。但是,如果事先知道最多有一个项目与谓词匹配,那么std::find_if附带erase()会更快:

auto it = std::find_if(
             test.begin(), 
             test.end(), 
             [](mystruct const & s) { 
               return s.port == 1001 && s.straddr == "abc"; 
             }
          );
if(it != test.end())//make sure you dont pass end() iterator.
    test.erase(it); 

希望有帮助。