I am looking for a generic, reusable way to shuffle a std::vector in C++. This is how I currently do it, but I think it’s not very efficient because it needs an intermediate array and it needs to know the item type (DeckCard in this example):
srand(time(NULL));
cards_.clear();
while (temp.size() > 0) {
int idx = rand() % temp.size();
DeckCard* card = temp[idx];
cards_.push_back(card);
temp.erase(temp.begin() + idx);
}
From C++11 onwards, you should prefer:
Live example on Coliru
Make sure to reuse the same instance of
rngthroughout multiple calls tostd::shuffleif you intend to generate different permutations every time!Moreover, if you want your program to create different sequences of shuffles each time it is run, you can seed the constructor of the random engine with the output of
std::random_device:For C++98 you may use: