14

我正在使用 MSVC 2010。

我正在尝试从列表中删除重复项(不保留任何一项)

为什么这段代码在调试模式下要慢 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

通常,由于迭代器调试支持,STL 在 Visual Studio 中调试时非常慢。_HAS_ITERATOR_DEBUGGING您可以通过设置为 0来显着加快速度。

于 2012-09-27T23:40:44.647 回答