-1
爲了好玩,我製作了一個用於洗牌數組的單例。我試圖在C++中用std :: shuffle洗牌數組,但每次運行程序時洗牌都會產生相同的結果。C++ std :: Shuffle不是隨機的
代碼:
// 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
爲什麼陣列不在每次程序運行以不同的方式來分類?
可能重複的:性病:: default_random_engine generato值介乎0.0和1.0(http://stackoverflow.com/questions/15461140/stddefault-隨機發動機generato值-愨-0-0和-1-0)。 *「我認爲每次使用[time(0)]會得到不同的結果,但結果等於'洗牌元素:3 1 5 4 2'」 - 對我來說,它會產生不同的結果(如預期的那樣)。你確定你已經重新編譯了這個程序嗎? – soon
@soon是我也在網上得到結果 –
我已經改變了你的'getRandomEngine',現在它按預期工作:[http://cpp.sh/5di4](http://cpp.sh/5di4) – soon