สับเปลี่ยน () เทียบกับ Random_shuffle () ใน C ++

Sab Peliyn Theiyb Kab Random Shuffle Ni C



ใน C++ ไลบรารีมาตรฐานมีสองฟังก์ชัน สับเปลี่ยน () และ Random_shuffle() ที่ใช้ในการจัดเรียงองค์ประกอบของคอนเทนเนอร์ใหม่ แม้ว่าทั้งสองฟังก์ชันมีจุดประสงค์เดียวกัน แต่ต่างกันที่การใช้งานและวิธีการสร้างตัวเลขสุ่ม

จากบทความนี้ คุณจะพบความแตกต่างระหว่างสองฟังก์ชันนี้และเข้าใจวิธีการทำงาน

สับเปลี่ยน () ใน 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() อาจจะเพียงพอ