Синтаксис:
шаблон < клас Т > невалиден размяна ( 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 ;
}
Като импортираме заглавния файл
Списъкът, получен след операцията за размяна с помощта на метода 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() в зависимост от типа променливи на данни също са обяснени в този урок.