指定された範囲 [最小、最大] 内で乱数を一様に生成する方法を探します。
rand の欠陥
rand() と法演算子を使用する現在の実装では、均一な分散が保証されない可能性があります。その動作は RAND_MAX と範囲自体に依存します。
C 11 と均一範囲生成
C 11 では、std::uniform_int_distribution がこのニーズに合わせたソリューションを提供します。
#includestd::uniform_int_distribution distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
コンテナShuffle
コンテナをシャッフルするには、std::shuffle:
#include#include std::vector vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
Boost.Random
C 11 コンパイラの使用が不可能な場合Boost.Random について考えてみましょう。これは、C 11 の対応物と同様のインターフェイスを備えています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3