私はあなたがこれを持っていると仮定しています:
typedef std::vector<value> Block;
typedef std::vector< Block > my2dVector;
そして、あなたは次のような関数を持っています:
bool BlockHasInsufficientEnergy( Block const& vec );
十分なエネルギーを持たないブロックを削除したい。
削除するとは、後でブロックを 96 個より少なくしたいということですか? そう仮定します。
次に、これを行う正しい方法は次のとおりです。
void RemoveLowEnergyBlocks( my2dVector& vec )
{
my2dVector::iterator erase_after = std::remove_if( vec.begin(), vec.end(), BlockHasInsufficientEnergy );
vec.erase( erase_after, vec.end() );
}
上記は 1 行で実行できますが、2 行で実行すると、何が起こっているのかがより明確になります。
remove_if
3 番目の引数の条件を通過するすべてのものを検索し、範囲から除外します。vector
人生の最後に「ゴミ」のあった地点を返します。次に、ゴミを消去します。これは remove-erase イディオムと呼ばれます。