The Wayback Machine - https://web.archive.org/web/20211006180747/https://ru.cppreference.com/w/cpp/algorithm/swap
Пространства имён
Варианты
Действия

std::swap

Материал из cppreference.com
< cpp‎ | algorithm
 
 
Библиотека алгоритмов
Ограниченные алгоритмы и алгоритмы над диапазонами(C++20)
Ограниченные алгоритмы, например std::ranges::copy, std::ranges::sort, ...
Политики исполнения (C++17)
Немодифицирующие операции над последовательностями
(C++11)(C++11)(C++11)
(C++17)
Модифицирующие операции над последовательностями
Операции разбиения
Операции сортировки
Операции двоичного поиска
Операции с наборами (в отсортированных диапазонах)
Операции с кучей
(C++11)
Операций минимума/максимума
(C++11)
(C++17)

Операции перестановки
Числовые операции
Операции с неинициализированной памятью
(C++17)
(C++17)
(C++17)
Библиотека C
 
Определено в заголовочном файле <algorithm>
Определено в заголовочном файле<utility>
(до C++11)
(начиная с C++11)
template<class T >
void swap( T& a, T& b );
(1)
template<class T2, size_t N >
void swap( T2 (&a)[N], T2 (&b)[N]);
(2) (начиная с C++11)

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

1) Меняет местами значения a и b.

2) Обмен массивов a и b. В действительности вызывает std::swap_ranges(a, a + N, b).

Содержание

[править]Параметры

a, b значения, которые нужно поменять местами
Требования к типам
-
T должен соответствовать требованиям MoveAssignable и MoveConstructible.
-
T2 должен соответствовать требованиям Swappable.

[править]Возвращаемое значение

(Нет)

[править]Исключения

1)
спецификация noexcept:  
noexcept(noexcept(

    std::is_nothrow_move_constructible<T>::value&&
    std::is_nothrow_move_assignable<T>::value

))
2)
спецификация noexcept:  
noexcept(noexcept(swap(*a, *b)))

[править]Сложность

1) Константная.

2) Линейная от N

[править]Специализации

Допускаются пользовательские специализации и перегрузки алгоритма std::swap, но перегрузки, как правило, предпочтительнее, так как специализации шаблона функции не разрешены для шаблонов классов. Библиотека функций всегда использует предоставленные пользователем перегрузки при обмене, если они находятся при аргументно-зависимом поиске (в соответствии с концепцией Swappable).

Следующие перегрузки уже предусмотрены в стандартной библиотеке:

специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
Специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
задаётся алгоритмом std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
специализация алгоритма std::swap
(шаблон функции)[править]
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap алгоритм
Оригинал:
specializes the std::swap algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)[править]
Специализируется std::swap алгоритм
Оригинал:
specializes the std::swap algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)[править]
Специализируется std::swap алгоритм
Оригинал:
specializes the std::swap algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)[править]
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
({{{1}}})
специализация алгоритма std::swap
(функция)[править]
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)
Специализируется std::swap() алгоритм
Оригинал:
specializes the std::swap() algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции)

[править]Пример

vector <int> x;

x.push_back(228);

x.push_back(1337);

swap(x[0], x[1]);

cout<<x[0]<<' '<<x[1];


vector <int> x;

x.push_back(228);

x.push_back(1337);

int F;

F=x[0];

x[0]=x[1];

x[1]=F;

cout<<x[0]<<' '<<x[1];


[править]См. также

меняет местами элементы, на которые указывают два итератора
(шаблон функции)[править]
меняет местами два диапазона элементов
(шаблон функции)[править]
close