2

私はstd::vector<IRenderable*>_pBkBuffer以下のコードに)を持っています。これには、変更されない多数の静的オブジェクト (ベクターの先頭) と、その後に可変数の動的オブジェクトが含まれます。

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

??? には何を入れることができますか?非静的レンダラブルを消去削除するには?

私はそれを知っていますか?指定されたサブセット内のすべてのオブジェクトに一致する必要があります。

まったく消去削除を使用する必要がありますか、それとも別のアプローチを使用する必要がありますか?

4

1 に答える 1

4

'そもそも消去削除を使用する必要がありますか?

明らかに、オブジェクトがどこにあるかはすでにわかっているので、いいえ。これをして:

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

または、さらに良い:

_pkBuffer->resize( _nStatics );

ベクトルにランダムに散らばっている場合は、イレース削除イディオムが使用されます。代わりに欠けているの???は、削除される要素が比較される値です。ポインターを格納しているため、カスタムの述語 (関数ポインター、ファンクター、またはラムダ) を提供し、remove_if代わりに使用する必要があります。

于 2013-04-30T14:01:57.260 に答える