我正在使用包含一些控制变量的 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...
第一类:
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&) ' 转换为类型 `bool (CMR_Spline::*)(Interval_structure&)'
对于如何编写 IsMarkedToDelete 函数和 prune_Intervals 例程以正确反映 remove-if 用于遍历向量和评估 IsMarkedToDelete 的指针,我有点困惑。
如何使用erase+remove_if 正确执行此操作,或者如果不是这样,请建议另一种方法。我被我有限的编程经验难住了。谢谢!