Shuffle() vs random_shuffle() di C++

Shuffle Vs Random Shuffle Di C



Di C++, pustaka standar menyediakan dua fungsi, acak() Dan pengacakan_acak() yang digunakan untuk mengatur ulang elemen wadah. Meskipun kedua fungsi memiliki tujuan yang sama, keduanya berbeda dalam penerapannya dan cara menghasilkan angka acak.

Dari artikel ini, Anda akan menemukan perbedaan antara kedua fungsi ini dan memahami cara kerjanya.

acak () di C ++

Itu acak() function adalah fungsi C++ bawaan yang digunakan untuk mengocok atau mengatur ulang elemen secara acak dalam rentang tertentu. Fungsi tersebut dideklarasikan di dalam file header dan memiliki dua argumen: posisi awal rentang adalah argumen pertama, dan argumen kedua mewakili posisi akhir.







Selain itu, dibutuhkan juga parameter ketiga opsional, yaitu objek fungsi yang menghasilkan angka acak yang akan digunakan untuk mengocok elemen dalam rentang.



Ketika acak() fungsi dipanggil, itu secara acak menyusun ulang elemen dalam rentang yang ditentukan menggunakan generator angka acak yang disediakan. Hasil pengocokan tidak dapat diprediksi, dan setiap permutasi yang mungkin dari unsur-unsur memiliki kemungkinan yang sama untuk terjadi.



Contoh

Perhatikan contoh penggunaan di bawah ini acak() fungsi dalam C++. Dalam program ini, kami telah membuat vektor hal dengan nilai integer dari 0 sampai 10. Kemudian kita membangkitkan generator angka acak, yang kemudian dilewatkan bersama dengan rentang vektor ke acak() fungsi. Itu acak() fungsi mengambil nomor dan menukar elemen berdasarkan nomor ini. Kemudian kami mencetak urutan vektor yang disusun ulang menggunakan for loop





#termasuk

#termasuk

#sertakan

#sertakan

#termasuk

menggunakan namespace std ;

int utama ( )

{

vektor < int > hal { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

tidak ditandatangani benih = krono :: jam sistem :: Sekarang ( ) . waktu_sejak_zaman ( ) . menghitung ( ) ;

acak ( hal. mulai ( ) , hal. akhir ( ) , default_random_engine ( benih ) ) ;

cout << 'elemen yang diacak adalah:' ;

untuk ( int & Saya : hal )

cout << ' ' << Saya ;

cout << endl ;

kembali 0 ;

}

random_shuffle() di C++

Itu pengacakan_acak() fungsi juga mengatur ulang elemen secara acak dalam rentang yang diberikan dengan beberapa nomor yang dipilih secara acak. Ini menggunakan generator angka acak untuk menghasilkan urutan angka acak dan kemudian menggunakan angka tersebut untuk mengocok elemen dalam rentang, sehingga urutan program akan berbeda setiap kali Anda menjalankan program.



Diperlukan dua parameter untuk pengacakan_acak() : posisi awal rentang adalah parameter pertama, dan parameter kedua adalah posisi akhir. Selain itu, pengacakan_acak() dapat mengambil parameter ketiga opsional, yang merupakan objek fungsi yang dapat digunakan untuk menghasilkan angka acak untuk mengocok elemen.

Contoh

Contoh di bawah ini mengilustrasikan cara kerja dari pengacakan_acak() dalam C++. Dalam kode ini, kami telah membuat a benda vektor dengan bilangan bulat nilai dari 1 sampai 10 dan kemudian menggunakan untuk putaran untuk mencetak urutan yang diacak secara acak:

#termasuk

#sertakan

menggunakan namespace std ;

int utama ( )

{

vektor < int > hal { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( static_cast < tidak ditandatangani int > ( waktu ( nullptr ) ) ) ;

pengacakan_acak ( hal. mulai ( ) , hal. akhir ( ) ) ;

untuk ( int Saya : hal ) {

cout << Saya << ' ' ;

}

cout << ' \N ' ;



kembali 0 ;

}

Perbedaan Antara shuffle() dan random_shuffle()

Inilah perbedaan utama antara acak() Dan pengacakan_acak() fungsi dalam C++.

1: pengacakan_acak() membutuhkan sepasang iterator yang mewakili rentang elemen untuk diacak, sementara acak() membutuhkan sepasang iterator yang mewakili rentang elemen untuk diacak, serta generator angka acak untuk digunakan untuk pengocokan.

2: pengacakan_acak() umumnya kurang efisien daripada acak() , karena harus menghasilkan urutan angka acak yang akan digunakan untuk pengocokan.

3: pengacakan_acak() menggunakan implementasi internal C++ Standard Library dari generator angka acak untuk mengocok elemen, sementara acak() memungkinkan Anda untuk menentukan generator nomor acak Anda sendiri untuk digunakan untuk pengocokan, memberi Anda lebih banyak kontrol atas keacakan pengocokan.

4: random_shuffle() diperkenalkan di C++98 dan didukung oleh semua versi C++ Standard Library, sementara acak() diperkenalkan di C++ 11 dan hanya didukung oleh kompiler yang mengimplementasikan versi standar tersebut.

Pikiran Akhir

Pilihan antara acak() Dan pengacakan_acak() tergantung pada kasus penggunaan dan persyaratan khusus Anda. Jika Anda memerlukan kontrol lebih besar atas keacakan pengocokan, atau jika Anda ingin menggunakan penghasil angka acak khusus, maka acak() akan menjadi pilihan yang lebih baik. Di sisi lain, jika Anda tidak memerlukan tingkat kontrol tersebut dan hanya ingin cara sederhana untuk mengacak elemen, maka pengacakan_acak() bisa cukup.