Sözdizimi:
şablon < T sınıfı > geçersiz takas ( T & değişken_1 , T & değişken_2 ) ;Her ikisi de depo değerleri olan birinci değişkenin değeri ve ikinci değişkenin değeri değiştirilecektir. Fonksiyon sadece değişkenlerin değerlerini değiştirir; çıktısı yoktur.”
C++'da swap() fonksiyonunun çalışması
Takas işlevi, aşağıdaki üç satır kullanılarak C++'da uygulanır.
Şablon geçersiz takas ( T & i , T & j ) {
T sıcaklık = standart :: hareket ( i ) ;
i = standart :: hareket ( j ) ;
j = standart :: hareket ( sıcaklık ) ;
}
“T temp = std::move(i)” ifadesi; “i” öğesinin bir kopyasını yapar ve çoğaltır. Burada “i = std::hareket(j)”; “i”nin orijinal öğelerini atar ve orijinal “j” yerine “j”nin “i” kopyasını saklar. “j = std:: hareket(temp)” formülü; “i”yi bir temp klonu ile kaydedin ve aynı temp içeriğini kaldırın. Ayrıca, swap() işlevinin yürütülmesi tamamlandıktan sonra temp değişkenini silin.
Örnek 1: Swap için std::move Yöntemini Kullanan Program
Aşağıda gösterildiği gibi, C++11 özelliği std::move kullanarak iki nesneyi değiştirebiliriz.
#include
#include
şablon
geçersiz takas ( T & a , T & b )
{
T sıcaklık = standart :: hareket ( a ) ;
a = standart :: hareket ( b ) ;
b = standart :: hareket ( sıcaklık ) ;
}
int ana ( )
{
standart :: vektör liste = { 10 , 12 , 13 , on beş , 16 , 17 } ;
int i = 3 , j = 5 ;
takas ( liste [ i ] , liste [ j ] ) ;
için ( int i : liste ) {
standart :: cout << i << '' ;
}
dönüş 0 ; }
“T” nesnesine sahip bir şablon bildirimimiz var. Daha sonra “swap” olarak fonksiyonu kurduk. İşlev, “T” türündeki &a ve &b parametrelerini alır. T& a, T& b argümanlarının, iletilen değişkenin adresini referans alması veya saklaması ve geri döndürmeden doğrudan bunlara uygulanması sonucunda, swap(T&a, T&b) işlevine referansla çağrı denir.
Void takasının içinde, std::move yöntemini kullanarak takas algoritmasını uyguladık. Ardından ana programı oluşturduk. Burada “list” değişkenini tanımladık ve onu sayısal değerler listesi ile başlattık. Takas için “i” ve “j” değerlerini belirledik. İkinci dizinde yer alan sayısal değer, beşinci dizindeki sayısal değer ile değiştirilmiştir. Daha sonra takas fonksiyonunu çağırdık ve takas için “i” ve “j” indekslerini ona ilettik. For döngüsü, takas edilen listeyi yazdırmak için kullanılır.
Çıktı, değiştirilen listeyi görüntüledi. Oluşturulan yeni listenin belirtilen indekslere göre değer değiştirdiğini gözlemleyebilirsiniz.
Örnek 2: Değiştirmek İçin std::swap Yöntemini Kullanan Program
Yardımcı program başlığında (C++ 11'de) bulunan std::swap mekanizmasının kullanılması olağan düzeltmedir. İşlevini sağlamak için iki nesnenin değerleri değiştirilir.
#include#include
#include
int ana ( )
{
standart :: vektör dizisi = { 3 , 6 , 9 , on beş , 13 } ;
int i = 3 , j = 4 ;
standart :: takas ( varış [ i ] , varış [ j ] ) ;
için ( int i : varış ) {
standart :: cout << i << '' ;
}
dönüş 0 ;
}
std::swap yöntemi kullanılarak takas işlemi sonrası elde edilen liste aşağıdaki gibi görüntülenir:
Örnek 3: Değiştirmek için std::iter_swap Yöntemini Kullanan Program
Algoritmanın başlığında listelenen std::iter_swap algoritmasının kullanılması ek bir seçenektir. Çalışma şekli, sağlanan yineleyicilerin işaret ettiği nesnelerin değerlerini değiştirmektir.
#include#include
#include
#include
int ana ( )
{
standart :: vektörvec = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
Oto itr1 = standart :: sonraki ( bir şey. başlamak ( ) , i ) ;
Oto itr2 = standart :: sonraki ( bir şey. başlamak ( ) , j ) ;
standart :: iter_swap ( itr1 , itr2 ) ;
için ( int i : bir şey ) {
standart :: cout << i << '' ;
}
dönüş 0 ;
}
Programın ana yöntemine bir vektör değişkeni “vec” tanımladık ve ona bir vektör sayı listesi atadık. Daha sonra “i” ve “j” değişkenine indeks pozisyonunu belirledik. iter1 ve iter2'yi argüman olarak alan std::iter_swap yöntemi çağrılır. iter1 ve iter2, auto anahtar sözcüğüyle bildirilir ve yineleme işlemine sahiptir. for döngüsü yöntemi, yürütme sırasında vektör dizisinin değiştirilen değerlerini yazdırır.
std::iter_swap yöntemi, belirtilen vektörlerin değerlerini başarıyla değiştirdi.
Örnek 4: Swap için Geçici Değişkenler Olmadan Kullanma Programı
Bu örnek, geçici değişkenler kullanmadan C++ kodunda sayıları değiştirmenin yeni bir yolunu gösterir.
#includead alanı std kullanarak ;
int ana ( )
{
int x1 = iki , x2 = 12 ;
cout << 'Takas etmeden önce.' << son ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << son ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \n Değiştirdikten sonra.' << son ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << son ;
dönüş 0 ; }
Şimdi bu programın işleyişini inceleyelim. Burada başlangıçta sayı ile belirlenen x1 ve x2'yi sırasıyla tanımladık. Sonra x1 = x1+ x2 formülünü kullanarak x1 ve x2'yi toplayıp sonucu x1'e koyuyoruz. Bu, x1'in 2 artı 12'ye eşit olduğunu gösterir. Bu nedenle, şimdi 14'e eşittir. Ardından, x2 = x1 – x2 formülünü uygularız. Bu x2 = 14 – 12 olduğunu gösterir. Dolayısıyla x2 şimdi 2'ye eşittir. Bir kez daha x1 = x1 – x2 formülünü uyguluyoruz. Bu, x1 = 14 – 2 olduğunu gösterir. Bu nedenle, sonunda x1 = 12 olur. Sonuç olarak, numaralar değiştirildi.
Öncesi ve sonrası değiştirilen numara, aşağıdaki istem ekranında görüntülenir.
Çözüm
Burada, C++'da swap()'ın tam açıklamasını, kullanımını ve nasıl çalıştığını gösteren bazı örnekleri gözden geçireceğiz. std::swap() işlevi kullanılarak iki değişkenin değeri değiştirilebilir. C++ STL, std::swap() adlı yerleşik bir işlev içerir. takas(T& değişken 1, T& değişken 2) işlevi referansa göre çağrılır ve veri değişkenlerinin türüne bağlı olarak C++ swap() aşırı yüklemeleri de bu eğitimde açıklanmıştır.