Стандартный обмен С++

Standartnyj Obmen S



«Обмен — это обмен двумя или более вещами. Данные между двумя переменными в программировании можно переключать. Обмен вещами между двумя людьми возможен в реальной жизни. Значения любых двух объектов можно поменять местами с помощью стандартной библиотечной функции swap() в C++. Он был помещен под заголовком «утилита» в C11. Функция swap() в C++ имеет сложность N для массивов, потому что каждый элемент должен быть заменен отдельно, в то время как сложность функции для констант постоянна. Функция swap() выдает предупреждение или ошибку, если происходит сбой любого из переменных элементов. Посмотрите на сигнатуру функции для std::swap() ниже:

Синтаксис:

шаблон < класс Т > пустота менять ( Т & переменная_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 ;
}

Импортировав заголовочный файл , мы можем получить доступ к функции подкачки в нашей программе. Здесь мы включили заголовочный файл с еще двумя важными библиотеками. Затем мы установили метод int main. Внутри основной программы мы объявили вектор, создав переменную «arr». Переменная «arr» инициализируется пятью элементами целого числа. Позиции индекса присваиваются «i» и «j» для замены. Затем переменные «i» и «j» передаются в метод std::swap для замены значения указанного индекса. С помощью цикла for мы напечатали замененные массивы.

Список, полученный после операции подкачки с помощью метода 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++ в зависимости от типа переменных данных.