14

MSVC2010を使用しています。

リストから重複を(それらのいずれも保持せずに)削除しようとしています

このコードがデバッグ モードで 100 倍遅いのはなぜですか?

同等のすべてのオブジェクトを削除し、デバッグ モードで高速化する他の方法はありますか?

現時点ではデバッグを使用できないところまで来ています。リリースには数秒かかりますが、処理には数分かかります。

void SomeFunction()
{
    std::list<Something> list;
    std::list<Something>::iterator it1;
    std::list<Something>::iterator it2;

    for (it1 = list.begin(); it1 != list.end(); it1++)
    {
        for (it2 = list.begin(); it2!=list.end(); it2++)
        {
            if (it1->SomeValue() == it2->SomeValue())
            {
                if (it1 != it2)
                {
                    list.erase(it1);
                    list.erase(it2);

                    it2 = list.begin();
                    it1 = it2++;
                }
            }
        }
    }
}
4

1 に答える 1

22

一般に、Visual Studio でのデバッグ中の STL は、イテレータ デバッグ サポートにより非常に遅くなります。_HAS_ITERATOR_DEBUGGING0に設定すると、これを劇的に高速化できます。

于 2012-09-27T23:40:44.647 に答える