【问题标题】:erase-remove idiom problems for vector in a class擦除类中向量的习语问题
【发布时间】:2014-02-22 18:28:39
【问题描述】:

我使用的 class1 包含一些控制变量和另一个类 class2 的向量。我希望能够标记 class2 向量的各种元素(使用布尔变量“delete_me”),然后运行擦除删除习语以从向量中消除这些元素。我在网上找到了一些这样的例子,但这些是用于比我使用的更简单的数据结构。

我在编译时遇到类型转换错误(使用 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 typebool (CMR_Spline::)(Interval_structure&) ' 转换为类型 `bool (CMR_Spline::*)(Interval_structure&)'

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

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

【问题讨论】:

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


    【解决方案1】:

    将函数设为静态:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多