Почему этот код в 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.