読者です 読者をやめる 読者になる 読者になる

std::shuffle()の経緯

C++

C++11のヘッダでは、既存のstd::random_shuffle()に加えてstd::shuffle()という関数が入りました。std::shuffle()の方は、C++11の乱数生成エンジンを受け取りやすいというのが特徴です。

template<class RandomAccessIterator, class UniformRandomNumberGenerator>
void shuffle(RandomAccessIterator first, RandomAccessIterator last,
             UniformRandomNumberGenerator&& rand);

経緯を調べてみると、std::shuffle()は元々std::random_shuffle()という名前でした。
これはConcept-basedオーバーロードで既存のstd::random_shuffle()と同じ名前での共存を実現していましたが、コンセプトの削除とともにN3090のドラフトからstd::shuffle()という名前に改名されたようです。

// random_shuffle()という名前だったころのshuffle() with コンセプト
template<RandomAccessIterator Iter, UniformRandomNumberGenerator Rand>
void random_shuffle(Iter first, Iter last, Rand&& g);