C++ Std Swap

C Std Swap



“การแลกเปลี่ยนคือการแลกเปลี่ยนสิ่งของตั้งแต่สองอย่างขึ้นไป ข้อมูลระหว่างสองตัวแปรในการเขียนโปรแกรมสามารถสลับได้ การแลกเปลี่ยนสิ่งของระหว่างคนสองคนเป็นไปได้ในชีวิตจริง ค่าของอ็อบเจ็กต์สองค่าใดๆ สามารถสลับได้โดยใช้ฟังก์ชันไลบรารีมาตรฐาน swap() ใน C++ มันถูกวางไว้ใต้ส่วนหัว 'ยูทิลิตี้' ใน C11 ฟังก์ชัน swap() ใน C++ มีความซับซ้อนของ N สำหรับอาร์เรย์ เนื่องจากแต่ละองค์ประกอบต้องถูกสลับเป็นรายบุคคล ในขณะที่ความยากของฟังก์ชันสำหรับค่าคงที่จะคงที่ ฟังก์ชัน swap() ส่งคำเตือนหรือข้อผิดพลาดหากองค์ประกอบตัวแปรใดล้มเหลว ดูลายเซ็นของฟังก์ชันสำหรับ std::swap() ด้านล่าง:

ไวยากรณ์:

แม่แบบ < ชั้น T > โมฆะ แลกเปลี่ยน ( ตู่ & ตัวแปร_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 นอกจากนี้ ให้ลบตัวแปร temp หลังจากการดำเนินการของฟังก์ชัน swap() เสร็จสิ้น



ตัวอย่างที่ 1: โปรแกรมที่ใช้ std::move Method เป็น Swap

ดังที่แสดงด้านล่าง เราสามารถสลับสองอ็อบเจ็กต์โดยใช้คุณลักษณะ C++11 std::move





#include

#include <เวกเตอร์>



แม่แบบ
โมฆะ แลกเปลี่ยน ( ตู่ & เอ , ตู่ & )
{
อุณหภูมิ = มาตรฐาน :: เคลื่อนไหว ( เอ ) ;
เอ = มาตรฐาน :: เคลื่อนไหว ( ) ;
= มาตรฐาน :: เคลื่อนไหว ( อุณหภูมิ ) ;
}
int หลัก ( )
{
มาตรฐาน :: เวกเตอร์ รายการ = { 10 , 12 , 13 , สิบห้า , 16 , 17 } ;
int ผม = 3 , เจ = 5 ;
แลกเปลี่ยน ( รายการ [ ผม ] , รายการ [ เจ ] ) ;
สำหรับ ( int ผม : รายการ ) {
มาตรฐาน :: ศาล << ผม << ' ' ;
}
กลับ 0 ; }

เรามีการประกาศเทมเพลตที่มีวัตถุ 'T' หลังจากนั้นเราได้สร้างฟังก์ชันเป็น 'swap' ฟังก์ชันใช้พารามิเตอร์สองตัว &a และ &b ประเภท 'T' อันเป็นผลมาจากอาร์กิวเมนต์ T& a, T& b อ้างอิงหรือจัดเก็บที่อยู่ของตัวแปรที่ส่งผ่านและนำไปใช้กับตัวแปรโดยตรงโดยไม่ส่งคืน ฟังก์ชัน swap(T& a, T& b) จะเรียกว่าการเรียกโดยการอ้างอิง



ภายใน void swap เราได้ใช้อัลกอริธึมของการสลับโดยใช้เมธอด std::move จากนั้นเราก็สร้างโปรแกรมหลัก ในที่นี้ เราได้ประกาศตัวแปร 'รายการ' และเริ่มต้นตัวแปรด้วยรายการค่าตัวเลข เราได้ตั้งค่าสำหรับ 'i' และ 'j' สำหรับการสลับ ค่าตัวเลขที่อยู่ในดัชนีที่สองถูกแทนที่ด้วยค่าตัวเลขที่ดัชนีที่ห้า จากนั้น เราเรียกฟังก์ชัน swap และส่งดัชนี 'i' และ 'j' ไปยังฟังก์ชันดังกล่าวเพื่อแลกเปลี่ยน for loop ใช้สำหรับพิมพ์รายการที่สลับ

ผลลัพธ์แสดงรายการที่แก้ไข คุณสามารถสังเกตรายการใหม่ที่สร้างขึ้นโดยสลับค่าตามดัชนีที่ระบุ

ตัวอย่างที่ 2: โปรแกรมที่ใช้ std::swap Method เป็น Swap

การใช้กลไก std::swap ที่พบในส่วนหัวของยูทิลิตี้ (ใน C++11) เป็นการแก้ไขตามปกติ ค่าของอ็อบเจ็กต์สองรายการถูกเปลี่ยนเพื่อให้ทำงานได้

#include

#include <เวกเตอร์>

#include <ยูทิลิตี้>



int หลัก ( )
{
มาตรฐาน :: vectorarr = { 3 , 6 , 9 , สิบห้า , 13 } ;
int ผม = 3 , เจ = 4 ;

มาตรฐาน :: แลกเปลี่ยน ( arr [ ผม ] , arr [ เจ ] ) ;

สำหรับ ( int ผม : arr ) {
มาตรฐาน :: ศาล << ผม << ' ' ;
}

กลับ 0 ;
}

โดยการนำเข้าไฟล์ส่วนหัว เราสามารถเข้าถึงฟังก์ชันการสลับในโปรแกรมของเราได้ ที่นี่ เราได้รวมไฟล์ส่วนหัว พร้อมกับไลบรารีที่สำคัญอีกสองไลบรารี จากนั้นเราได้สร้างวิธีการหลัก int ภายในโปรแกรมหลัก เราได้ประกาศเวกเตอร์โดยสร้างตัวแปร 'arr' ตัวแปร 'arr' เริ่มต้นจากองค์ประกอบทั้งห้าของจำนวนเต็ม ตำแหน่งดัชนีถูกกำหนดให้กับ “i” และ “j” สำหรับการแลกเปลี่ยน จากนั้นตัวแปร “i” และ “j” จะถูกส่งต่อไปยังเมธอด std::swap สำหรับการสลับค่าของดัชนีที่ระบุ ด้วย for loop เราได้พิมพ์อาร์เรย์ที่สลับแล้ว

รายการที่ได้รับหลังจากการดำเนินการสลับโดยใช้วิธี std::swap จะแสดงดังนี้:

ตัวอย่างที่ 3: โปรแกรมโดยใช้วิธี std::iter_swap เพื่อสลับ

การใช้อัลกอริทึม std::iter_swap ซึ่งแสดงอยู่ในส่วนหัวของอัลกอริทึม เป็นตัวเลือกเพิ่มเติม วิธีดำเนินการคือเปลี่ยนค่าของอ็อบเจ็กต์ที่ตัววนซ้ำที่ให้มาชี้ไป

#include

#include <เวกเตอร์>

#include

#include <อัลกอริทึม>



int หลัก ( )
{
มาตรฐาน :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int ผม = 0 , เจ = 4 ;
รถยนต์ itr1 = มาตรฐาน :: ต่อไป ( บางสิ่ง. เริ่ม ( ) , ผม ) ;
รถยนต์ itr2 = มาตรฐาน :: ต่อไป ( บางสิ่ง. เริ่ม ( ) , เจ ) ;

มาตรฐาน :: iter_swap ( itr1 , itr2 ) ;
สำหรับ ( int ผม : บางสิ่ง ) {
มาตรฐาน :: ศาล << ผม << ' ' ;
}
กลับ 0 ;
}

สำหรับวิธีการหลักของโปรแกรม เราได้ประกาศตัวแปรเวกเตอร์ “vec” และกำหนดรายการตัวเลขเวกเตอร์ให้กับมัน จากนั้น เราระบุตำแหน่งดัชนีให้กับตัวแปร “i” และ “j” เมธอด std::iter_swap ถูกเรียกใช้โดยใช้ iter1 และ iter2 เป็นอาร์กิวเมนต์ iter1 และ iter2 ถูกประกาศด้วยคำสำคัญ auto และมีการดำเนินการวนซ้ำ วิธี for loop พิมพ์ค่าที่สลับของอาร์เรย์เวกเตอร์เมื่อดำเนินการ

เมธอด std::iter_swap สลับค่าของเวกเตอร์ที่ระบุสำเร็จ

ตัวอย่างที่ 4: โปรแกรมการใช้โดยไม่มีตัวแปรชั่วคราวเพื่อสลับ

ตัวอย่างนี้แสดงวิธีใหม่ในการแลกเปลี่ยนตัวเลขในโค้ด C++ โดยไม่ต้องใช้ตัวแปรชั่วคราว

#include

ใช้เนมสเปซ std ;

int หลัก ( )
{
int x1 = สอง , x2 = 12 ;
ศาล << “ก่อนเปลี่ยน” << endl ;
ศาล << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;

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

ศาล << ' \n หลังจากเปลี่ยน” << endl ;
ศาล << '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() ขึ้นอยู่กับประเภทของตัวแปรข้อมูลจะอธิบายไว้ในบทช่วยสอนนี้ด้วย