C++ Std Swap

C Std Swap



„Размяната е акт на размяна на две или повече неща. Данните между две променливи в програмирането могат да се превключват. Размяната на неща между двама души е възможна в реалния живот. Стойностите на всеки два обекта могат да бъдат разменени с помощта на стандартната библиотечна функция swap() в C++. Той е поставен под заглавката „помощна програма“ в C11. Функцията swap() в C++ има сложност N за масиви, тъй като всеки елемент трябва да се разменя индивидуално, докато трудността на функцията за константи е постоянна. Функцията swap() извежда предупреждение или грешка, ако някой от променливите елементи не успее. Вижте сигнатурата на функцията за std::swap() по-долу:

Синтаксис:

шаблон < клас Т > невалиден размяна ( T и променлива_1 , T и променлива_2 ) ;

Както стойността на първата променлива, така и на втората променлива, и двете съхраняващи стойности, трябва да бъдат разменени. Функцията просто превключва стойностите на променливите; няма изход.“







Работа на функцията swap() в C++

Функцията за размяна е реализирана в C++ с помощта на следните три реда.



Шаблон невалиден размяна ( T и аз , T и й ) {
T темп = std :: ход ( аз ) ;
аз = std :: ход ( й ) ;
й = std :: ход ( темп ) ;
}

Изявлението „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 <вектор>



шаблон
невалиден размяна ( T и а , T и b )
{
T темп = std :: ход ( а ) ;
а = std :: ход ( b ) ;
b = std :: ход ( темп ) ;
}
вътр основен ( )
{
std :: вектор списък = { 10 , 12 , 13 , петнадесет , 16 , 17 } ;
вътр аз = 3 , й = 5 ;
размяна ( списък [ аз ] , списък [ й ] ) ;
за ( вътр аз : списък ) {
std :: cout << аз << ' ' ;
}
връщане 0 ; }

Имаме декларация на шаблон, която има обект „T“. След това установихме функцията като „размяна“. Функцията приема двата параметъра &a и &b от тип „T“. В резултат на аргументите T& a, T& b, които препращат или съхраняват адреса на предадената променлива и се прилагат директно към тях без връщане, функцията swap(T& a, T& b) се нарича извикване чрез препратка.



Вътре в размяната на void сме приложили алгоритъма за размяна с помощта на метода std::move. След това изградихме основната програма. Тук декларирахме променливата „списък“ и я инициализирахме със списъка от числови стойности. Задали сме стойностите за „i“ и „j“ за размяна. Числовата стойност, разположена на втория индекс, беше заменена с числовата стойност на петия индекс. След това извикахме функцията за размяна и й предадохме индексите „i“ и „j“ за размяна. Цикълът for се използва за отпечатване на разменения списък.

Резултатът показва модифицирания списък. Можете да наблюдавате как новият генериран списък разменя стойността според определени индекси.

Пример 2: Програма, използваща std::swap метод за размяна

Използването на механизма std::swap, открит в заглавката на помощната програма (в C++11), е обичайната корекция. Стойностите на два обекта се превключват, за да функционират.

#include

#include <вектор>

#include <помощна програма>



вътр основен ( )
{
std :: векторарр = { 3 , 6 , 9 , петнадесет , 13 } ;
вътр аз = 3 , й = 4 ;

std :: размяна ( обр [ аз ] , обр [ й ] ) ;

за ( вътр аз : обр ) {
std :: cout << аз << ' ' ;
}

връщане 0 ;
}

Като импортираме заглавния файл , можем да получим достъп до функцията за размяна в нашата програма. Тук сме включили заглавния файл с още две важни библиотеки. След това установихме основния метод int. Вътре в основния елемент на програмата сме декларирали вектора, като сме създали променливата 'arr.' Променливата “arr” се инициализира с петте елемента на цялото число. Позициите на индекса се присвояват на „i“ и „j“ за размяна. След това променливите „i“ и „j“ се предават на метода std::swap за размяна на стойността на посочения индекс. С цикъла for ние отпечатахме разменените масиви.

Списъкът, получен след операцията за размяна с помощта на метода std::swap, се показва, както следва:

Пример 3: Програма, използваща std::iter_swap метод за размяна

Използването на алгоритъма std::iter_swap, който е посочен в заглавката на алгоритъма, е допълнителна опция. Начинът, по който работи, е чрез превключване на стойностите на обектите, към които сочат предоставените итератори.

#include

#include <вектор>

#include

#include <алгоритъм>



вътр основен ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
вътр аз = 0 , й = 4 ;
Автоматичен itr1 = std :: следващия ( нещо. започвам ( ) , аз ) ;
Автоматичен itr2 = std :: следващия ( нещо. започвам ( ) , й ) ;

std :: iter_swap ( itr1 , itr2 ) ;
за ( вътр аз : нещо ) {
std :: cout << аз << ' ' ;
}
връщане 0 ;
}

Към основния метод на програмата сме декларирали векторна променлива „vec“ и сме й присвоили векторен списък от числа. След това уточнихме позицията на индекса на променливите „i“ и „j“. Извиква се методът std::iter_swap, който приема iter1 и iter2 като аргумент. iter1 и iter2 се декларират с ключовата дума auto и имат операция итерация. Методът за цикъл отпечатва разменените стойности на векторния масив при изпълнение.

Методът std::iter_swap успешно размени стойностите на посочените вектори.

Пример 4: Програма за използване без временни променливи за размяна

Този пример показва нов начин за размяна на числа в C++ код без използването на временни променливи.

#include

използване на пространство от имена std ;

вътр основен ( )
{
вътр x1 = две , x2 = 12 ;
cout << 'Преди размяната.' << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;

x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;

cout << ' След размяната.' << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;

връщане 0 ; }

Нека разгледаме работата на тази програма. Тук сме декларирали x1 и x2, които първоначално са зададени съответно с числото. След това, използвайки формулата x1 = x1+ x2, събираме x1 и x2 и поставяме резултата в x1. Това показва, че 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) се извиква по препратка, а C++ претоварва swap() в зависимост от типа променливи на данни също са обяснени в този урок.