Обмен значений двух переменных

Помечено: 

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 4 мес. назад.

  • Автор
    Сообщения
  • #5396
    @admin

    Пусть есть переменные a и b, нам нужно обменять их значения.
    Если до выполнения операции a = 123, b = 456,
    то после — a = 456, b = 123.

    С использованием третьей переменной

    Чтобы обменять их значения можно использовать третью переменную:

    buf = a;
    a = b;
    b = buf;

    В самом деле, присваивание a = b уничтожит данные, которые хранила переменная a до выполнения операции. Поэтому наиболее простой вариант — предварительно сохранить это значение в третьей переменной (буфере).

    Через сумму

    a = a + b;
    b = a - b;
    a = a - b;

    Этот вариант сложно понять, но его можно провизуализировать:

    Первым шагом мы помещаем в переменную a сумму, в результате старое значение, конечно, разрушается, но новое хранит и старое, и новое.
    Вторым шагом из этой суммы (a+b) вычитается b — получается a.

    В качестве домашнего задания предлагаю подумать о том, какой вариант эффективней (возможны ли случаи когда будет эффективней другой, почему). Какие ограничения на типы переменных A и B налагает каждый из них.

    Ключ ответов кроется во временных переменных, которые могут создаваться. Кстати, стандартная библиотека C++ минимизирует их количество в операции std::swap с помощью семантики перемещения.

Для ответа в этой теме необходимо авторизоваться.