0
for(myIterator = numbers.begin();myIterator != numbers.end() ;myIterator++)
{
    resultVect.push_back(*myIterator+2);

    numbers.erase(myIterator+2);            

}

数字は一連の数字で構成されています (例: 1,2,3,4,5,6,7) 次に、3 つおきの数字を消去したいと思います。何かのようなもの、

1 2 3 4 5 6 (最初のラウンド -> 3 アウト)

1 2 4 5 6 (2ラウンド目 -> 6が出た)

1 2 4 5 (3 回戦 -> 4 アウト)

等々。

出た数を別のベクトル(resultVect)に格納します。

アサーションエラーが発生しています。Plsはtqをアドバイスします

4

3 に答える 3

1

ベクターから要素を削除すると、その要素以降のすべての反復子が無効になります (現在の標準では、これを変更するための未解決の問題があります)。

最初の質問は、プロセスをどれだけ効率的にしたいかということです。パフォーマンスを(あまり)気にしない場合は、単純なループを実行できます。

for (int i = 3; i < input.size(); i+=3) {
   result.push_back(input[i]);
}
for (int i = (input.size()+2)/3 - 1; i >= 0; --i) {
   input.erase(input.begin()+i*3);
}

パフォーマンスが重要な場合は、アルゴリズムを確認しstd::remove、同じアプローチを使用して、アルゴリズムの実行中に要素の複数のコピーを作成しないようにすることができます。基本的に、元のコンテナーへの読み取りヘッドと書き込みヘッドが必要であり、条件が満たされない場合にのみ、読み取り場所から書き込み場所にコピーします。

于 2013-10-16T15:31:39.840 に答える