我应该在这里使用擦除删除习语吗?

时间:2013-04-30 13:58:13

标签: c++ std erase erase-remove-idiom

我在下面的代码中有std::vector<IRenderable*>_pBkBuffer)。它包含许多静态对象(在向量的开头),它们不会改变,后面跟着可变数量的动态对象。

// erase-remove, but leave the static renderables intact
_pBkBuffer->erase( 
    std::remove(
        _pBkBuffer->begin() + _nStatics, _pBkBuffer->end(), ???
    ), 
    _pBkBuffer->end() 
);

我能把什么?为了擦除 - 删除非静态可渲染物?

我知道???应匹配指定子集中的所有对象。

我应该使用擦除 - 删除,还是应该使用其他方法?

1 个答案:

答案 0 :(得分:4)

  

'我应该一直使用擦除 -

显然你已经知道对象在哪里,所以没有。你这样做:

_pBkBuffer->erase( _pBkBuffer->begin() + _nStatics, _pBkBuffer->end() );

或者,甚至更好:

_pkBuffer->resize( _nStatics );

如果你将它们随机散布在矢量中,则会使用删除删除习惯用法。缺少什么而不是???是要比较要删除的元素的值。由于您存储指针,因此您很可能需要提供自定义谓词(函数指针,仿函数或lambda)并使用remove_if代替。