swap — обмен значений двух объектов

Структуры и функции   12 апреля 2012  Автор статьи:  

Процедура swap производит обмен значений двух объектов некоторого класса.

Библиотека

swap содержится в библиотеке algorithm. Чтобы подключить эту библиотеку, в текст программы необходимо добавить строку строку.
#include

Способы вызова


template void swap (T& a, T& b);


a,\; b — два объекта класса, в котором должен быть определен конструктор копирования и оператор присваивания.

В введенных обозначениях работу процедуры можно описать так, что объекту a присваивается значение объекта b, а объекту b — значение объекта a.

Пример реализации

Поведение процедуры swap в точности описывается следующим кодом.

template void swap (T& a, T& b)
{
// Используем конструктор копирования
T c(a);
a = b;
b = c;
}

Заметим, что в реализации используется конструктор копирования и два оператора присваивания, поэтому процедура работает за линейное от размера параметров время. Это не имеет значения в случае обмена значений двух объектов примитивного типа, однако может серьезно замедлить работу программы в случае использования swap для классов, содержащих большой объем данных. Во втором случае рекомендуется перегрузить метод swap так, чтобы операции в нем осуществлялись только над теми данными, которые подлежат обмену.

Сложность

O\; (sizeof\; (T))

Пример использования


#include
#include
using namespace std;

int main()
{
// Введем две переменные и
// зададим им некотороые значения
int x = 5, y = 13;

// После применения swap
// переменная x станет равна 13,
// а y станет равна 5
swap (x, y);

// Убедимся в этом
cout << x << ' ' << y << endl; // Результат: // 13 5 // swap можно использовать и // для более сложных объектов int a[] = { 1, 2, 3 }; int b[] = { 11, 7, 5 }; // Аналогично, после этой операции // массивы обменяются элементами swap (a, b); // Убедимся в корректности // такого применения swap for (int i = 0; i < 3; i++) { cout << a[i] << ' ' << b[i] << endl; } // Результат: // 11 1 // 7 2 // 5 3 return 0; }

Научиться программировать

  • на Delphi

  • на Java

  • на C++