像这样:
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++;
}
最佳答案
首先,使用 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
伴随着 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);
希望对您有所帮助。
关于c++ - 从vector中删除元素,vector被struct填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35715987/