Оцените это. Что еще более важно, отметьте его в вашем конкретном приложении . Нам нет смысла тестировать синтетическую среду выполнения обеих версий, когда ваш пробег будет варьироваться в зависимости от того, что вы делаете потом.
Узкое место - это неприятное освобождение и порча, которое происходит за занавесом. В зависимости от схемы распределения памяти, которую демонстрирует остальная часть вашей программы, вы, скорее всего, получите разные результаты.
Сказав это; Разница, скорее всего, незначительна, так что моя интуиция говорит, что идите на секунду и сохраните один цикл, если сомневаетесь.
Изменить: Обратите внимание, что если вы действительно беспокоитесь о скорости, используйте std::vector<int>
вместо std::list<int*>
. Разница будет значительно больше, чем между перечисленными вами опциями.
Редактировать 2: Если вы используете std::vector
, обязательно используйте вариант 1 (с clear
вместо многих erase
с). В этом случае действительно имеет огромное значение. Если элементы действительно огромные (в отличие от int
), вы можете захотеть поместить указатели (или умные указатели, в этом отношении) в вектор, чтобы минимизировать накладные расходы на копирование.