C++における`random_shuffle`関数の用法を説明せよ。
random_shuffleはC++標準ライブラリにおける、指定範囲内の要素をランダムに並び替えるアルゴリズム関数です。使い方は次のとおりです。
#include <algorithm>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 随机重排numbers中的元素
std::random_shuffle(numbers.begin(), numbers.end());
// 输出重排后的结果
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}
上のコードは、たとえば4 3 1 5 2 などのランダムに並びなおした数字のシーケンスを出力します。
random_shuffleはシャッフルする範囲を表す2つのイテレータ引数を受け取ります。上記の例ではベクトルのbegin()メンバー関数とend()メンバー関数を使用してイテレータを取得していますが、他のコンテナのイテレータや普通のポインタを使用することもできます。
ただし、random_shuffleはC++11で非推奨となっており、より柔軟なshuffle関数が推奨されています。shuffle関数の使い方はrandom_shuffleと似ており、ランダム数生成器を3番目の引数で追加で渡す必要があります。サンプルコードを以下に示します。
#include <algorithm>
#include <vector>
#include <random>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 创建一个随机数生成器
std::random_device rd;
std::mt19937 gen(rd());
// 随机重排numbers中的元素
std::shuffle(numbers.begin(), numbers.end(), gen);
// 输出重排后的结果
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}
これで独自の乱数生成器を利用して並び替えを実行することができ、その結果をよりランダムにすることができる。