Home >Backend Development >C++ >How Can I Efficiently and Reusably Shuffle Vectors in C ?
Shuffling a vector is a common operation in various programming tasks. While there are several ways to achieve this, it's crucial to opt for a generic and efficient approach that can be reused for different scenarios.
In the provided code snippet, the current approach involves creating an intermediate array and knowing the item type, which can lead to inefficiencies. A more efficient and reusable solution is provided using C 11 and later versions.
Using C 11 and Later
#include <algorithm> #include <random> auto rng = std::default_random_engine {}; std::shuffle(std::begin(cards_), std::end(cards_), rng);
This code uses the std::shuffle function, which requires a random engine as the third argument. The std::default_random_engine is used for generating random numbers. By using this function, we can shuffle the elements in place without creating intermediate arrays or knowing item types.
Using C 98
For C 98, we can use the std::random_shuffle function:
#include <algorithm> std::random_shuffle(cards_.begin(), cards_.end());
Seeding the Random Engine
To generate different permutations each time, we can seed the random engine using the std::random_device:
auto rd = std::random_device {}; auto rng = std::default_random_engine { rd() }; std::shuffle(std::begin(cards_), std::end(cards_), rng);
This approach ensures that different sequence of shuffles are generated each time the program is executed.
The above is the detailed content of How Can I Efficiently and Reusably Shuffle Vectors in C ?. For more information, please follow other related articles on the PHP Chinese website!