Пространства имён
Варианты
Действия

std::swap(std::tuple)

Материал из cppreference.com
< cpp‎ | utility‎ | tuple
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
Определено в заголовочном файле <tuple>
(1)
template< class... Types >

void swap( std::tuple<Types...>& lhs,

           std::tuple<Types...>& rhs ) noexcept(/* смотрите ниже */);
(начиная с C++11)
(до C++20)
template< class... Types >

constexpr void swap( std::tuple<Types...>& lhs,

                     std::tuple<Types...>& rhs ) noexcept(/* смотрите ниже */);
(начиная с C++20)
template< class... Types >

constexpr void swap( const std::tuple<Types...>& lhs,

                     const std::tuple<Types...>& rhs ) noexcept(/* смотрите ниже */);
(2) (начиная с C++23)

Меняет местами содержимое lhs и rhs. Эквивалентно lhs.swap(rhs).

1) Эта перегрузка участвует в разрешении перегрузки, только если std::is_swappable_v<Ti> равно true для всех i от 0 до sizeof...(Types).
2) Эта перегрузка участвует в разрешении перегрузки, только если std::is_swappable_v<const Ti> равно true для всех i от 0 до sizeof...(Types).
(начиная с C++17)

Содержание

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

lhs, rhs объекты tuple, содержимое которых нужно поменять местами

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

(нет)

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

спецификация noexcept:  
noexcept(noexcept(lhs.swap(rhs)))

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

#include <iostream>
#include <string>
#include <tuple>
 
int main()
{
    std::tuple<int, std::string, float>
                      p1{42, "АБВГ", 2.71},
                      p2;
    p2 = std::make_tuple(10, "1234", 3.14);
 
    auto print_p1_p2 = [&](auto rem) {
        std::cout << rem
                  << "p1 = {" << std::get<0>(p1)
                  << ", "     << std::get<1>(p1)
                  << ", "     << std::get<2>(p1) << "}, "
                  << "p2 = {" << std::get<0>(p2)
                  << ", "     << std::get<1>(p2)
                  << ", "     << std::get<2>(p2) << "}\n";
    };
 
    print_p1_p2("Перед p1.swap(p2): ");
    p1.swap(p2);
    print_p1_p2("После p1.swap(p2): ");
    swap(p1, p2);
    print_p1_p2("После swap(p1, p2): ");
}

Вывод:

Перед p1.swap(p2): p1 = {42, АБВГ, 2.71}, p2 = {10, 1234, 3.14}
После  p1.swap(p2): p1 = {10, 1234, 3.14}, p2 = {42, АБВГ, 2.71}
После swap(p1, p2): p1 = {42, АБВГ, 2.71}, p2 = {10, 1234, 3.14}

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

меняет местами содержимое двух tuple
(public функция-элемент) [править]
специализация алгоритма std::swap
(шаблон функции) [править]