จากบทความนี้ คุณจะพบความแตกต่างระหว่างสองฟังก์ชันนี้และเข้าใจวิธีการทำงาน
สับเปลี่ยน () ใน C ++
เดอะ สับเปลี่ยน () ฟังก์ชันเป็นฟังก์ชัน C++ ในตัวที่ใช้เพื่อสุ่มสับเปลี่ยนหรือจัดเรียงองค์ประกอบใหม่ในช่วงที่กำหนด มีการประกาศฟังก์ชั่นใน <อัลกอริทึม> ไฟล์ส่วนหัวและมีสองอาร์กิวเมนต์: ตำแหน่งเริ่มต้นของช่วงคืออาร์กิวเมนต์แรก และอาร์กิวเมนต์ที่สองแทนตำแหน่งสิ้นสุด
นอกจากนี้ยังใช้พารามิเตอร์ที่สามซึ่งเป็นทางเลือก ซึ่งเป็นวัตถุฟังก์ชันที่สร้างตัวเลขสุ่มเพื่อใช้สำหรับการสับเปลี่ยนองค์ประกอบในช่วง
เมื่อ สับเปลี่ยน () ฟังก์ชันนี้ถูกเรียกใช้ โดยจะจัดเรียงองค์ประกอบใหม่แบบสุ่มในช่วงที่ระบุโดยใช้ตัวสร้างตัวเลขสุ่มที่ให้มา ผลลัพธ์ของการสับเปลี่ยนนั้นไม่สามารถคาดเดาได้ และการเรียงสับเปลี่ยนองค์ประกอบที่เป็นไปได้แต่ละอย่างมีโอกาสเกิดขึ้นได้เท่าๆ กัน
ตัวอย่าง
พิจารณาตัวอย่างด้านล่างของการใช้ สับเปลี่ยน () ฟังก์ชั่น ใน C++ ในโปรแกรมนี้ เราได้สร้างเวกเตอร์ บางสิ่ง ด้วยค่าจำนวนเต็มตั้งแต่ 0 ถึง 10 จากนั้นเราจะสร้างตัวสร้างตัวเลขสุ่ม ซึ่งจะถูกส่งต่อไปพร้อมกับช่วงของเวกเตอร์ไปยัง สับเปลี่ยน () การทำงาน. เดอะ สับเปลี่ยน () ฟังก์ชันรับหมายเลขและสลับองค์ประกอบตามหมายเลขนี้ จากนั้นเราพิมพ์ลำดับเวกเตอร์ที่จัดเรียงใหม่โดยใช้ for วนซ้ำ
#รวมถึง
#รวม <เวกเตอร์>
#include <อัลกอริทึม>
#รวม <สุ่ม>
#รวมถึง <โครโน>
ใช้เนมสเปซมาตรฐาน ;
นานาชาติ หลัก ( )
{
เวกเตอร์ < นานาชาติ > บางสิ่ง { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
ไม่ได้ลงนาม เมล็ดพันธุ์ = โครโน :: system_clock :: ตอนนี้ ( ) . เวลา_ตั้งแต่_ยุค ( ) . นับ ( ) ;
สับเปลี่ยน ( บางสิ่ง. เริ่ม ( ) , บางสิ่ง. จบ ( ) , default_random_engine ( เมล็ดพันธุ์ ) ) ;
ศาล << 'องค์ประกอบที่สับคือ:' ;
สำหรับ ( นานาชาติ & ฉัน : บางสิ่ง )
ศาล << ' ' << ฉัน ;
ศาล << จบ ;
กลับ 0 ;
}
Random_shuffle() ใน C++
เดอะ Random_shuffle() ฟังก์ชั่นยังสุ่มจัดเรียงองค์ประกอบใหม่ในช่วงที่กำหนดด้วยตัวเลขที่สุ่มเลือก จะใช้ตัวสร้างตัวเลขสุ่มเพื่อสร้างลำดับของตัวเลขสุ่ม จากนั้นใช้ตัวเลขเหล่านั้นเพื่อสับเปลี่ยนองค์ประกอบในช่วง ดังนั้นลำดับของโปรแกรมจะแตกต่างกันทุกครั้งที่คุณรันโปรแกรม
จำเป็นต้องมีพารามิเตอร์สองตัวสำหรับ Random_shuffle() : ตำแหน่งเริ่มต้นของช่วงคือพารามิเตอร์ตัวแรก และพารามิเตอร์ตัวที่สองคือตำแหน่งสิ้นสุด นอกจากนี้ Random_shuffle() สามารถใช้พารามิเตอร์ที่สามซึ่งเป็นทางเลือก ซึ่งเป็นวัตถุฟังก์ชันที่สามารถใช้เพื่อสร้างตัวเลขสุ่มสำหรับการสับเปลี่ยนองค์ประกอบ
ตัวอย่าง
ตัวอย่างด้านล่างแสดงการทำงานของ Random_shuffle() ใน C++ ในรหัสนี้ เราได้สร้างไฟล์ สิ่งเวกเตอร์ ด้วยค่าจำนวนเต็มตั้งแต่ 1 ถึง 10 แล้วใช้ สำหรับลูป ในการพิมพ์ลำดับการสับแบบสุ่ม:
#รวมถึง#include <อัลกอริทึม>
ใช้เนมสเปซมาตรฐาน ;
นานาชาติ หลัก ( )
{
เวกเตอร์ < นานาชาติ > บางสิ่ง { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
เส้นใย ( static_cast < ไม่ได้ลงนาม นานาชาติ > ( เวลา ( nullptr ) ) ) ;
สุ่ม_สับเปลี่ยน ( บางสิ่ง. เริ่ม ( ) , บางสิ่ง. จบ ( ) ) ;
สำหรับ ( นานาชาติ ฉัน : บางสิ่ง ) {
ศาล << ฉัน << ' ' ;
}
ศาล << ' \n ' ;
กลับ 0 ;
}
ความแตกต่างระหว่างการสับเปลี่ยน () และ Random_shuffle ()
นี่คือความแตกต่างที่สำคัญระหว่าง สับเปลี่ยน () และ Random_shuffle() ฟังก์ชั่นในภาษา C++
1: Random_shuffle() ใช้ตัววนซ้ำคู่หนึ่งแทนช่วงขององค์ประกอบที่จะสับเปลี่ยน ในขณะที่ สับเปลี่ยน () ใช้ตัววนซ้ำคู่หนึ่งแทนช่วงขององค์ประกอบเพื่อสับเปลี่ยน เช่นเดียวกับตัวสร้างตัวเลขสุ่มเพื่อใช้สำหรับการสับ
2: Random_shuffle() โดยทั่วไปจะมีประสิทธิภาพน้อยกว่า สับเปลี่ยน () เนื่องจากต้องสร้างลำดับของตัวเลขสุ่มเพื่อใช้สำหรับการสับ
3: สุ่ม _ สับเปลี่ยน () ใช้การติดตั้งตัวสร้างตัวเลขสุ่มภายในของ C++ Standard Library เพื่อสับเปลี่ยนองค์ประกอบในขณะที่ สับเปลี่ยน () ให้คุณกำหนดตัวสร้างตัวเลขสุ่มของคุณเองเพื่อใช้สำหรับการสับ ให้คุณควบคุมการสุ่มของการสับได้มากขึ้น
4: Random_shuffle() ถูกนำมาใช้ใน C++98 และรองรับทุกเวอร์ชันของไลบรารีมาตรฐาน C++ ในขณะที่ สับเปลี่ยน () ได้รับการแนะนำใน C ++ 11 และรองรับโดยคอมไพเลอร์ที่ใช้มาตรฐานเวอร์ชันนั้นเท่านั้น
ความคิดสุดท้าย
ทางเลือกระหว่าง สับเปลี่ยน () และ Random_shuffle() ขึ้นอยู่กับกรณีการใช้งานและข้อกำหนดเฉพาะของคุณ หากคุณต้องการควบคุมการสุ่มของการสับไพ่มากขึ้น หรือถ้าคุณต้องการใช้ตัวสร้างตัวเลขสุ่มแบบกำหนดเอง สับเปลี่ยน () จะเป็นทางเลือกที่ดีกว่า ในทางกลับกัน หากคุณไม่ต้องการการควบคุมในระดับนั้นและต้องการวิธีง่ายๆ ในการสับเปลี่ยนองค์ประกอบ Random_shuffle() อาจจะเพียงพอ