РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
660 of 815 menu

Функция swap

Функция swap выполняет обмен значениями между двумя объектами. В первом параметре мы передаем первый объект, а во второй - второй объект. После вызова функции значения объектов меняются местами. Функция объявлена в заголовочном файле <utility> и доступна в пространстве имен std. Начиная со стандарта C++11, функция swap также поддерживает перемещение (move-семантику), что делает её особенно эффективной для обмена тяжелыми объектами, такими как контейнеры.

Стандартная библиотека предоставляет специализации swap для всех стандартных контейнеров (vector, string, map и других), а также для базовых типов. Для пользовательских типов можно перегрузить функцию swap, чтобы обеспечить эффективный обмен.

Синтаксис

#include <utility> // Общий шаблон template <class T> void swap(T& a, T& b) noexcept(/* см. ниже */); // Специализация для массивов template <class T, size_t N> void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));

Пример

Давайте обменяем значения двух целочисленных переменных:

#include <iostream> #include <utility> using namespace std; int main() { int a = 1; int b = 2; cout << "Before swap: a = " << a << ", b = " << b << endl; swap(a, b); cout << "After swap: a = " << a << ", b = " << b << endl; return 0; }

Результат выполнения кода:

"Before swap: a = 1, b = 2" "After swap: a = 2, b = 1"

Пример

Давайте обменяем содержимое двух строк:

#include <iostream> #include <string> #include <utility> using namespace std; int main() { string str1 = "abcde"; string str2 = "12345"; cout << "Before swap: str1 = " << str1 << ", str2 = " << str2 << endl; swap(str1, str2); cout << "After swap: str1 = " << str1 << ", str2 = " << str2 << endl; return 0; }

Результат выполнения кода:

"Before swap: str1 = abcde, str2 = 12345" "After swap: str1 = 12345, str2 = abcde"

Пример

Давайте обменяем содержимое двух векторов:

#include <iostream> #include <vector> #include <utility> using namespace std; int main() { vector<int> vec1 = {1, 2, 3, 4, 5}; vector<int> vec2 = {10, 20, 30}; cout << "Before swap: vec1 size = " << vec1.size() << ", vec2 size = " << vec2.size() << endl; swap(vec1, vec2); cout << "After swap: vec1 size = " << vec1.size() << ", vec2 size = " << vec2.size() << endl; cout << "vec1 contains:"; for (int x : vec1) cout << " " << x; cout << endl; cout << "vec2 contains:"; for (int x : vec2) cout << " " << x; cout << endl; return 0; }

Результат выполнения кода:

"Before swap: vec1 size = 5, vec2 size = 3" "After swap: vec1 size = 3, vec2 size = 5" "vec1 contains: 10 20 30" "vec2 contains: 1 2 3 4 5"

Смотрите также

  • функция move,
    которая преобразует объект в rvalue-ссылку
  • функция forward,
    которая сохраняет категорию значения при передаче
  • функция exchange,
    которая заменяет значение и возвращает старое
  • концепция RAII,
    которая управляет ресурсами через конструкторы и деструкторы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить