@gth-other

Будет ли std::swap(vector[0], vector[1]) быстрее, чем vector[1] = vector[0]?

Допустим, что у нас есть вектор из двух элементов. Необходимо заменить значение в первом элементе вектора на значение в нулевом элементе вектора. Что будет хранится после операции в нулевом элементе - не имеет значения. Тогда какой из этих вариантов будет быстрее?

std::swap(vector[0], vector[1]);

vector[1] = vector[0];

Понятное дело, что конкретно на данном примере с маленьким вектором разница в скорости не имеет значения, но я решаю задачу где будет огромный вектор и надо будет выполнять огромное число подобных операций.
  • Вопрос задан
  • 330 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
В общем случае - будет.
std::swap работает за константу:
Complexity
1) Constant.


Присвоение за линию:
Complexity
1) Linear in the size of *this and other.


Edit: это если присваемые штуки - вектора. Или какие-то большие объекты с семантикой перемещения. Если у вас тупо числа, то одно присвоение будет быстрее swap.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы