擦除 - 删除类中向量的习语问题

时间:2014-02-22 18:28:39

标签: c++ class vector erase-remove-idiom

我使用的class1包含一些管理变量和另一个类class2的向量。我希望能够标记class2向量的各种元素(使用布尔变量'delete_me'),然后运行erase-remove习惯用法从向量中消除这些元素。我在网上找到了一些这样的例子,但这些是比我使用的更简单的数据结构。

我编译时遇到类型转换错误(使用g ++ v4.7.3)。

等级2:

class Interval_structure {
   //class uses default destructor
   public:
      float x1, x2, y1, y2;
      float A; 
      float B; 
      float delta_x; 
      bool delete_me;
etc...

第1课:

class CMR_Spline {
   //class uses default destructor
   public:
      vector< Interval_structure > Interval;
      int some_ints; 
      float some_floats;

  bool IsMarkedToDelete( Interval_structure& o )
  {
      return o.delete_me;
  }

  void prune_Intervals() {
  //intervals that have been slated for deletion are removed using the remove-erase idiom
     Interval.erase( remove_if(Interval.begin(), Interval.end(), IsMarkedToDelete ), Interval.end() );

  }

当我编译时,我得到以下错误,引用prune_Intervals例程中的单行使用erase + remove_if:

  

错误:无法将CMR_Spline::IsMarkedToDelete' from type bool(CMR_Spline ::)(Interval_structure&amp;)'转换为类型`bool(CMR_Spline :: *)(Interval_structure&amp;)'

我对如何编写IsMarkedToDelete函数和prune_Intervals例程以正确反映remove-if用于遍历向量并评估IsMarkedToDelete的指针感到困惑。

如何使用erase + remove_if正确执行此操作,或者如果不是这样,请建议另一种方法。我被有限的编程经验困扰和阻碍。谢谢!

1 个答案:

答案 0 :(得分:2)

使函数静态:

static bool IsMarkedToDelete( Interval_structure& o )
{
    return o.delete_me;
}