Синтаксис:
шаблон < класс Т > пустота менять ( Т & переменная_1 , Т & переменная_2 ) ;И значение первой переменной, и значение второй переменной, обе из которых хранят значения, должны быть заменены местами. Функция просто переключает значения переменных; у него нет выхода».
Работа функции swap() в C++
Функция swap реализована на C++ с использованием следующих трех строк.
Шаблон пустота менять ( Т & я , Т & Дж ) {
Т темп знак равно станд. :: шаг ( я ) ;
я знак равно станд. :: шаг ( Дж ) ;
Дж знак равно станд. :: шаг ( температура ) ;
}
Оператор «T temp = std::move(i)»; делает копию элемента «i» и дублирует его. Здесь «i = std::move(j)»; отбрасывает исходные элементы «i» и сохраняет «i» копию «j» вместо исходного «j». Формула «j = std::move(temp)»; сохраните «i» с клоном temp и удалите идентичное содержимое temp. Кроме того, удалите временную переменную после завершения выполнения функции swap().
Пример 1. Программа, использующая метод std::move для подкачки
Как показано ниже, мы можем поменять местами два объекта, используя функцию C++11 std::move.
#include <иопоток>
#include <вектор>
шаблон
пустота менять ( Т & а , Т & б )
{
Т темп знак равно станд. :: шаг ( а ) ;
а знак равно станд. :: шаг ( б ) ;
б знак равно станд. :: шаг ( температура ) ;
}
инт главный ( )
{
станд. :: вектор список знак равно { 10 , 12 , 13 , пятнадцать , 16 , 17 } ;
инт я знак равно 3 , Дж знак равно 5 ;
менять ( список [ я ] , список [ Дж ] ) ;
за ( инт я : список ) {
станд. :: cout << я << ' ' ;
}
возвращаться 0 ; }
У нас есть объявление шаблона, в котором есть объект «T». После этого мы установили функцию «своп». Функция принимает два параметра &a и &b типа «T». В результате того, что аргументы T& a, T& b ссылаются или хранят адрес переданной переменной и применяются непосредственно к ним без возврата, функция swap(T& a, T& b) называется вызовом по ссылке.
Внутри пустого свопа мы применили алгоритм свопинга с помощью метода std::move. Затем мы создали программу main’s. Здесь мы объявили переменную «список» и инициализировали ее списком числовых значений. Мы установили значения для «i» и «j» для замены. Числовое значение, расположенное по второму индексу, было заменено числовым значением по пятому индексу. Затем мы вызвали функцию подкачки и передали ей индексы «i» и «j» для подкачки. Цикл for используется для печати замененного списка.
На выходе отображается измененный список. Вы можете наблюдать, как новый сгенерированный список поменял местами значения в соответствии с указанными индексами.
Пример 2. Программа, использующая метод std::swap для свопинга
Использование механизма std::swap, найденного в заголовке утилиты (в C++11), является обычным решением. Значения двух объектов меняются местами, чтобы заставить его работать.
#include <иопоток>#include <вектор>
#include <утилита>
инт главный ( )
{
станд. :: векторобработка знак равно { 3 , 6 , 9 , пятнадцать , 13 } ;
инт я знак равно 3 , Дж знак равно 4 ;
станд. :: менять ( обр [ я ] , обр [ Дж ] ) ;
за ( инт я : обр ) {
станд. :: cout << я << ' ' ;
}
возвращаться 0 ;
}
Импортировав заголовочный файл
Список, полученный после операции подкачки с помощью метода std::swap, выглядит следующим образом:
Пример 3. Программа, использующая метод std::iter_swap для обмена
Использование алгоритма std::iter_swap, который указан в заголовке алгоритма, является дополнительной опцией. Он работает путем переключения значений объектов, на которые указывают предоставленные итераторы.
#include <иопоток>#include <вектор>
#include <итератор>
#include <алгоритм>
инт главный ( )
{
станд. :: векторвек знак равно { 64 , 61 , 62 , 63 , 60 } ;
инт я знак равно 0 , Дж знак равно 4 ;
авто itr1 знак равно станд. :: следующий ( вещь. начинать ( ) , я ) ;
авто itr2 знак равно станд. :: следующий ( вещь. начинать ( ) , Дж ) ;
станд. :: iter_swap ( itr1 , itr2 ) ;
за ( инт я : вещь ) {
станд. :: cout << я << ' ' ;
}
возвращаться 0 ;
}
В основном методе программы мы объявили векторную переменную «vec» и присвоили ей векторный список чисел. Затем мы указали позицию индекса для переменной «i» и «j». Вызывается метод std::iter_swap, который принимает iter1 и iter2 в качестве аргумента. Iter1 и iter2 объявлены с ключевым словом auto и имеют операцию итерации. Метод цикла for печатает замененные значения векторного массива при выполнении.
Метод std::iter_swap успешно поменял местами значения указанных векторов.
Пример 4: Программа использования без временных переменных для замены
В этом примере показан новый способ замены чисел в коде C++ без использования временных переменных.
#include <иопоток>используя пространство имен std ;
инт главный ( )
{
инт х1 знак равно два , х2 знак равно 12 ;
cout << «Перед обменом». << конец ;
cout << 'х1 = ' << х1 << ', х2 = ' << х2 << конец ;
х1 знак равно х1 + х2 ;
х2 знак равно х1 - х2 ;
х1 знак равно х1 * х2 ;
cout << ' \n После обмена». << конец ;
cout << 'х1 = ' << х1 << ', х2 = ' << х2 << конец ;
возвращаться 0 ; }
Разберем работу этой программы. Здесь мы объявили x1 и x2, которые изначально заданы числом соответственно. Затем по формуле х1 = х1+ х2 складываем х1 и х2 и переводим результат в х1. Это означает, что x1 равно 2 плюс 12. Следовательно, теперь равно 14. Затем применим формулу x2 = x1 – x2. Это означает, что x2 = 14 – 12. Следовательно, x2 теперь равно 2. Еще раз применим формулу x1 = x1 – x2. Это означает, что x1 = 14 – 2. Следовательно, x1 = 12 в конце. В результате номера поменялись.
Число, замененное до и после, отображается на следующем экране подсказки.
Вывод
Здесь мы рассмотрим полное описание swap() в C++, его использование и несколько примеров, показывающих, как он работает. С помощью функции std::swap() можно поменять местами значения двух переменных. C++ STL включает встроенную функцию std::swap(). В этом руководстве также объясняются вызовы функции swap(T&, переменная 1, T&, переменная 2) по ссылке, а также перегрузки swap() в C++ в зависимости от типа переменных данных.