C++ 为什么这个随机数发生器产生的序列总是相同的?

C++ 为什么这个随机数发生器产生的序列总是相同的?,c++,random,c++11,C++,Random,C++11,可能重复: 我尝试为给定范围内的随机整数实现以下生成器类: class RandomInteger { protected: std::default_random_engine randomEngine; std::uniform_int_distribution<> distribution; public: RandomInteger(int64_t lower, int64_t upper); virtual ~RandomInte

可能重复:

我尝试为给定范围内的随机整数实现以下生成器类:

class RandomInteger {

protected:

    std::default_random_engine randomEngine;
    std::uniform_int_distribution<> distribution;

public:

    RandomInteger(int64_t lower, int64_t upper);

    virtual ~RandomInteger();

    virtual int64_t generate();
};


RandomInteger::RandomInteger(int64_t lower, int64_t upper) : distribution(lower, upper) {

}

RandomInteger::~RandomInteger() {
    // TODO Auto-generated destructor stub
}

int64_t RandomInteger::generate() {
    int64_t i = this->distribution(this->randomEngine);
    return i;
}
类随机整数{
受保护的:
std::默认的随机引擎随机引擎;
标准:均匀分布;
公众:
RandomInteger(整数下限,整数上限);
虚拟整数();
虚拟int64_t generate();
};
RandomInteger::RandomInteger(整数下限,整数上限):分布(下限,上限){
}
RandomInteger::~RandomInteger(){
//TODO自动生成的析构函数存根
}
int64_t RandomInteger::generate(){
int64_t i=此->分布(此->随机引擎);
返回i;
}

它生成范围内的整数,但每次生成的值序列都是相同的-不是很随机。为什么?

通常,伪随机生成器接受一个种子

如果从不更改种子,则始终会得到相同的伪随机输出/序列

编辑:我坚持使用伪随机(有时是伪混沌)这个词,而不是滥用的随机


edit2:你的问题应该有c++11解决方案(看看@R.Martinho Fernandes的答案)

你能把代码发布到你设定种子的地方吗?@honk我猜没有了,这就是问题所在。
//TODO自动生成的析构函数存根
自动生成的任何东西都会对您造成很大的伤害…@ildjarn这是Eclipse CDT。为什么这是一种伤害?因为让用户声明析构函数会改变类型的琐碎性。当编译器生成的实现可以使用时,请不要声明特殊成员。感谢您提供的唯一建设性意见。“精确复制”并没有给出C++11的解决方案。然而,在引用的问题上有一些有趣的链接:@StephaneRolland我也喜欢,但我同意Griwes的说法,OP只是没有想到种子。“伪混沌”从谷歌返回4890个结果,“伪随机”返回1980000个结果。老实说,我以前从未听说过它,谢谢你给我介绍了一些新的东西。“伪超时空”从谷歌返回17000条。我很可能有这种偏见,因为我读的是法语。这是和伊安尼斯·塞纳基斯关于他的随机合成的书,和法国关于混沌理论的书。。。因此,在英语中说伪随机可能更正确。我重新编辑:-)