我编写了以下类,用于从给定的区间生成随机整数[lower, upper]
。
class RandomInteger {
protected:
std::random_device randomDevice;
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) : randomEngine(this->randomDevice()), distribution(lower, upper) {
}
RandomInteger::~RandomInteger() {
// TODO Auto-generated destructor stub
}
int64_t RandomInteger::generate() {
int64_t i = this->distribution(this->randomEngine);
return i;
}
如果间隔保持不变并且进行了多次调用,这是可以的generate
。但是,现在我的用例是从一个总是变化的间隔生成整数(上限每次都增加)。
首先,这需要快速。这与密码学无关,因此非常伪随机数是可以的(并且std::random_device
可能不需要)。如果可能,我还想避免使用 C 风格并使用现代 C++11 风格。
你能建议有效地做到这一点的方法吗?