我在下面的代码中有std::vector<IRenderable*>
(_pBkBuffer
)。它包含许多静态对象(在向量的开头),它们不会改变,后面跟着可变数量的动态对象。
// erase-remove, but leave the static renderables intact
_pBkBuffer->erase(
std::remove(
_pBkBuffer->begin() + _nStatics, _pBkBuffer->end(), ???
),
_pBkBuffer->end()
);
我能把什么?为了擦除 - 删除非静态可渲染物?
我知道???应匹配指定子集中的所有对象。
我应该使用擦除 - 删除,还是应该使用其他方法?
答案 0 :(得分:4)
'我应该一直使用擦除 -
显然你已经知道对象在哪里,所以没有。你这样做:
_pBkBuffer->erase( _pBkBuffer->begin() + _nStatics, _pBkBuffer->end() );
或者,甚至更好:
_pkBuffer->resize( _nStatics );
如果你将它们随机散布在矢量中,则会使用删除删除习惯用法。缺少什么而不是???
是要比较要删除的元素的值。由于您存储指针,因此您很可能需要提供自定义谓词(函数指针,仿函数或lambda)并使用remove_if
代替。