C++ 从C+中用户定义的数据类型的向量中删除元素+;

C++ 从C+中用户定义的数据类型的向量中删除元素+;,c++,C++,我的结构如下所示: struct A{ int t; int j;} 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; } } 结构A的对象包含以下值: t

我的结构如下所示:

 struct A{
     int t; int j;}
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;
    }
}
结构A的对象包含以下值:

     t      j
     20     191
     111    18
     888    90        
我将所有这些对象都保存在std::vector中。现在我想从这个向量中删除元素,其中t==111,jYes:

#包括
v、 擦除(标准::如果(v.begin(),v.end(),则删除),
[](A const&x){return x.t==111&&x.j<20;}),
v、 end());
是:

#包括
v、 擦除(标准::如果(v.begin(),v.end(),则删除),
[](A const&x){return x.t==111&&x.j<20;}),
v、 end());

听起来您想与以下各项一起使用:

v.erase(std::remove_if(v.begin(),v.end(),[](常量A&A){
返回a.t==111&&a.j<20;
}),v.end());

这基本上会将lambda返回的
true
的所有元素移到向量的后面,然后一次删除所有元素。

听起来像是要与以下元素一起使用:

v.erase(std::remove_if(v.begin(),v.end(),[](常量A&A){
返回a.t==111&&a.j<20;
}),v.end());

这基本上会将lambda返回的
true
的所有元素移到向量的后面,然后一次擦除所有元素。

请您解释一下函数erase中“[](常数&x)”意味着什么。您能解释一下“[](常数&x)意味着什么吗在函数erase中暗示。您能解释一下“[](常数A&x)“在函数erase中暗示了什么吗。@user1778824
[](常数A&A){…}
是一个lambda表达式。你需要一个C++11编译器才能让它工作。我正在使用gcc作为编译器…它能为我工作吗…如果不能,请建议一个替代方案。你能解释一下“[](常量&x)”在函数erase中意味着什么吗。@user1778824
[](常量a&a){…}
是一个lambda表达式。你需要一个C++11编译器才能工作。我正在使用gcc作为编译器…它对我有用吗…如果不行,请建议一个替代方案
#include <algorithm>

v.erase(std::remove_if(v.begin(), v.end(),
                       [](A const & x) { return x.t == 111 && x.j < 20; }),
        v.end());
v.erase(std::remove_if(v.begin(), v.end(), [](const A& a) {
  return a.t == 111 && a.j < 20;
}), v.end());