2Dベクトルvector < vector <int> > N
を検討し、以下のように、その内容があると言うことができます:なぜerase()関数が高価なのですか?
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
ので、ここでNの大きさは、今4すなわちN.size() = 4
で、次のコードを考えてみます。
int i = 0;
while(N != empty()){
N.erase(i);
++i;
}
を
Nのためにさまざまなサイズのこのコードだけの時間を計算しました。結果は次のとおりです。
.760000s:Nのサイズが20000 実行時間が22.900000s
ある:Nのサイズが10000 実行時間が0.230000s
ある:10
Nのサイズ1000 実行時間でありますNの大きさは30000 実行時間である:526.540000s
:Nのサイズは47895 実行時間であるを206.620000s
私の質問は、なぜこの機能が高価なのですか?そうであれば、多くのプログラムの条件付き消去文は、この関数のために永久に取ることができます。 std::map
でも消去機能を使うのと同じです。この機能の代替手段はありますか? Boostのような他のライブラリは何を提供していますか?
私はこの機能を分析しようとしているため、N.erase()
全体を行うことはできません。
あなたのコードは未定義の動作をしています。コンテナ 'N'は、' N.size() 'を超えて要素を消去するので、空にはなりません。 –
++ iまたはi ++でテストしたかどうか分かりません。私はすぐにそれをチェックし、間違っている場合は更新を掲載しますが、私はどちらも100%働いています。 –
要素の半分だけを消去するのではなく、すべてを削除することを認識していますか? – fredoverflow