Почему этот код в 100 раз медленнее при отладке?

Я использую 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++;
                }
            }
        }
    }
}

1 ответ

В общем, STL работает очень медленно при отладке в Visual Studio из-за поддержки отладки итераторами. Вы можете значительно ускорить это, установив _HAS_ITERATOR_DEBUGGING до 0.

Другие вопросы по тегам