面白いのは、配列をシャッフルするためのシングルトンを作ることです。私はstd :: shuffleでC++で配列をシャッフルしようとしていますが、シャッフルはプログラムを実行するたびに同じ結果を生成します。C++ std ::シャッフルランダムではありません
コード:
// Example program
#include <iostream>
#include <string>
#pragma once
#include <memory>
#include <random>
#include <ctime>
#include <algorithm>
class RandomPicker
{
public:
~RandomPicker();
std::default_random_engine getRandomEngine();
static std::shared_ptr<RandomPicker> getInstance();
private:
std::default_random_engine dre = std::default_random_engine(time(0));
RandomPicker();
static std::shared_ptr<RandomPicker> instance;
};
std::shared_ptr<RandomPicker> RandomPicker::instance = nullptr;
RandomPicker::RandomPicker()
{
}
RandomPicker::~RandomPicker()
{
}
std::default_random_engine RandomPicker::getRandomEngine()
{
return std::default_random_engine();
}
std::shared_ptr<RandomPicker> RandomPicker::getInstance()
{
if (instance == nullptr)
{
instance.reset(new RandomPicker);
}
return instance;
}
int main()
{
std::array<int,5> foo {1,2,3,4,5};
std::shared_ptr<RandomPicker> r = RandomPicker::getInstance();
shuffle (foo.begin(), foo.end(), r->getRandomEngine());
std::cout << "shuffled elements:";
for (int& x: foo) std::cout << ' ' << x;
std::cout << '\n';
}
私は思っ
std::default_random_engine dre = std::default_random_engine(time(0));
//notice the time(0)
を使用すると、毎回異なる結果を得るが、その結果はと等しくなるでしょう。毎回プログラムが実行異なる方法で配列ソートされていないのはなぜ3 1 5 4 2
:
要素をシャッフル?
可能な重複:[0.0と1.0 betwenのstd :: default_random_engine generato値が](http://stackoverflow.com/questions/15461140/stddefault-ランダムエンジン - ジェネラリート - バリュー - ベトナム - 0-0 - および - 1-0)。 * "私は[time(0)]を使うと毎回違う結果が得られると思いましたが、結果は' shuffled elements:3 1 5 4 2' "*と同じです - 私にとっては(期待どおりの)別の結果が得られます。プログラムを再コンパイルしてもよろしいですか? – soon
@soonはい私はまた結果をオンラインで得ます –
私はあなたの 'getRandomEngine'を変更しました、そして今期待どおりに動作します:[http://cpp.sh/5di4](http://cpp.sh/5di4) – soon