我有以下表格的结构:
struct A{
int t; int j;}
struct A的对象包含以下值:
t j
20 191
111 18
888 90
我将所有这些对象保存在std :: vector中。现在我想删除此向量中的元素,其中t == 111且j <20。现在我迭代向量,以便按照下面给出的方式删除元素:
std::vector<A>::size_type i = 0;
while ( i < v.size() ) {
if ( (v[i].t==111) && (v[i].j<20) ) {
v.erase( v.begin() + i );
} else {
++i;
}
}
有一种更好的方法可以删除用户定义数据类型的std :: vector中的元素,而不是迭代。
答案 0 :(得分:3)
是:
#include <algorithm>
v.erase(std::remove_if(v.begin(), v.end(),
[](A const & x) { return x.t == 111 && x.j < 20; }),
v.end());
答案 1 :(得分:2)
您希望将erase-remove idiom与std::remove_if
:
v.erase(std::remove_if(v.begin(), v.end(), [](const A& a) {
return a.t == 111 && a.j < 20;
}), v.end());
这基本上将lambda返回true
的所有元素移动到向量的后面,然后一次性擦除它们。