1

我的结构如下所示:

 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 中的元素。

4

2 回答 2

4

是的:

#include <algorithm>

v.erase(std::remove_if(v.begin(), v.end(),
                       [](A const & x) { return x.t == 111 && x.j < 20; }),
        v.end());
于 2013-04-10T09:57:03.967 回答
2

听起来你想使用擦除删除成语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到向量的后面,然后一次性将它们全部擦除。

于 2013-04-10T09:57:14.597 回答