Shuffle() vs random_shuffle() dalam C++

Shuffle Vs Random Shuffle Dalam C



Dalam C++, perpustakaan standard menyediakan dua fungsi, shuffle() dan random_shuffle() yang digunakan untuk menyusun semula unsur-unsur bekas. Walaupun kedua-dua fungsi mempunyai tujuan yang sama, ia berbeza dalam pelaksanaannya dan cara ia menjana nombor rawak.

Daripada artikel ini, anda akan menemui perbezaan antara kedua-dua fungsi ini dan memahami cara ia berfungsi.

shuffle() dalam C++

The shuffle() fungsi ialah fungsi C++ terbina dalam yang digunakan untuk mengocok atau menyusun semula elemen secara rawak dalam julat tertentu. Fungsi ini diisytiharkan dalam fail pengepala dan mempunyai dua argumen: kedudukan permulaan julat ialah argumen pertama, dan argumen kedua mewakili kedudukan penamat.







Di samping itu, ia juga memerlukan parameter ketiga pilihan, iaitu objek fungsi yang menjana nombor rawak untuk digunakan untuk merombak elemen dalam julat.



Apabila shuffle() fungsi dipanggil, ia menyusun semula unsur-unsur dalam julat yang ditentukan secara rawak menggunakan penjana nombor rawak yang disediakan. Hasil shuffle tidak boleh diramalkan, dan setiap permutasi yang mungkin bagi unsur-unsur berkemungkinan sama berlaku.



Contoh

Pertimbangkan contoh di bawah menggunakan fungsi shuffle(). dalam C++. Dalam program ini, kami telah mencipta vektor sesuatu perkara dengan nilai integer 0 hingga 10. Kemudian kami menjana penjana nombor rawak, yang kemudiannya dihantar bersama dengan julat vektor ke shuffle() fungsi. The shuffle() fungsi mengambil nombor dan menukar elemen berdasarkan nombor ini. Kemudian kami mencetak urutan vektor yang disusun semula menggunakan gelung for





#include

#include

#include

#include

#include

menggunakan ruang nama std ;

int utama ( )

{

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

tidak ditandatangani benih = chrono :: jam_sistem :: sekarang ( ) . masa_sejak_zaman ( ) . mengira ( ) ;

kocok ( sesuatu perkara. bermula ( ) , sesuatu perkara. tamat ( ) , default_random_enjin ( benih ) ) ;

cout << 'elemen yang dikocok ialah:' ;

untuk ( int & i : sesuatu perkara )

cout << '' << i ;

cout << endl ;

kembali 0 ;

}

random_shuffle() dalam C++

The random_shuffle() fungsi juga secara rawak menyusun semula elemen dalam julat yang diberikan dengan beberapa nombor yang dipilih secara rawak. Ia menggunakan penjana nombor rawak untuk menjana jujukan nombor rawak dan kemudian menggunakan nombor tersebut untuk mengocok elemen dalam julat, jadi jujukan program akan berbeza setiap kali anda menjalankan program.



Dua parameter diperlukan untuk random_shuffle() : kedudukan permulaan julat ialah parameter pertama, dan parameter kedua ialah kedudukan penamat. Selain itu, random_shuffle() boleh mengambil parameter ketiga pilihan, iaitu objek fungsi yang boleh digunakan untuk menjana nombor rawak untuk merombak elemen.

Contoh

Contoh di bawah menggambarkan cara kerja random_shuffle() dalam C++. Dalam kod ini, kami telah mencipta a benda vektor dengan nilai integer dari 1 hingga 10 dan kemudian menggunakan untuk gelung untuk mencetak urutan yang dikocok secara rawak:

#include

#include

menggunakan ruang nama std ;

int utama ( )

{

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

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

random_shuffle ( sesuatu perkara. bermula ( ) , sesuatu perkara. tamat ( ) ) ;

untuk ( int i : sesuatu perkara ) {

cout << i << ' ' ;

}

cout << ' \n ' ;



kembali 0 ;

}

Perbezaan Antara shuffle() dan random_shuffle()

Berikut adalah perbezaan utama antara shuffle() dan random_shuffle() berfungsi dalam C++.

1: random_shuffle() mengambil sepasang iterator yang mewakili julat elemen untuk dikocok, manakala shuffle() mengambil sepasang iterator yang mewakili julat elemen untuk dikocok, serta penjana nombor rawak untuk digunakan untuk mengocok.

2: random_shuffle() secara amnya kurang cekap daripada shuffle() , kerana ia perlu menjana urutan nombor rawak untuk digunakan untuk mengocok.

3: random_shuffle() menggunakan pelaksanaan dalaman C++ Standard Library bagi penjana nombor rawak untuk mengocok elemen, manakala shuffle() membolehkan anda menentukan penjana nombor rawak anda sendiri untuk digunakan untuk merombak, memberikan anda lebih kawalan ke atas rawak kocok.

4: random_shuffle() telah diperkenalkan dalam C++98 dan disokong oleh semua versi Perpustakaan Standard C++, manakala shuffle() telah diperkenalkan dalam C++11 dan hanya disokong oleh penyusun yang melaksanakan versi piawai tersebut.

Fikiran Akhir

Pilihan antara shuffle() dan random_shuffle() bergantung pada kes penggunaan dan keperluan khusus anda. Jika anda memerlukan lebih kawalan ke atas rawak kocok, atau jika anda ingin menggunakan penjana nombor rawak tersuai, maka shuffle() akan menjadi pilihan yang lebih baik. Sebaliknya, jika anda tidak memerlukan tahap kawalan itu dan hanya mahukan cara mudah untuk mengocok elemen, maka random_shuffle() boleh mencukupi.