类似的东西:
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++;
}
答案 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()
希望有所帮助。