从矢量中擦除元素,并向量填充结构
Erase element from vector,and the vector is fill with struct
像这样:
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);
希望有帮助。
相关文章:
- 用C++中的数字和条件填充向量
- 使用 C++98 标准填充二维静态向量
- 如何使用迭代器填充未知大小的向量?
- 使用 C++-17,如何从字符串向量填充元组
- 用基于范围的for循环填充指针向量
- 使用所述填充构造函数初始化向量中的向量
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 如何将目录中的文件属性填充到结构向量中?
- 有没有办法使用数组填充向量?
- 用对对填充向量未按预期工作
- 用于填充 Base 和派生对象的 shared_ptr 向量的函数模板
- 可选类输入中的 C++ 填充向量
- 用构造函数调用填充向量
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- 从函数填充的字符串的推导向量到 int 的字符串
- parallel_for lambda 函数填充 2D 向量后出错
- 你能在C++中匿名填充一个向量向量吗?
- 如何有效地用向量填充结构
- 从矢量中擦除元素,并向量填充结构
- 一种用内部向量填充结构向量的优雅/高效方法