如何创建一个不断变化的伪随机整数? 这样,我可以输入:
cout << randomInt << endl;
cout << randomInt << endl;
cout << randomInt << endl;
并且该程序将返回如下内容:
45.7
564.89
1.64
(我不确定这是否有任何意义。)
答案 0 :(得分:8)
创建一个代表随机数的类:
class Random {
};
然后重载operator<<
:
std::ostream& operator<<(std::ostream& os, const Random& random) {
return os << generate_random();
}
用作:
int main() {
Random random;
std::cout << random;
std::cout << random;
std::cout << random;
return 0;
}
显然,您需要实施generate_random
。
答案 1 :(得分:5)
使用新的C++11 pseudo-random number generation classes:
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 6);
for(int n=0; n<10; ++n)
std::cout << dis(gen) << ' ';
std::cout << '\n';
}
以上模拟了十个骰子。
如果您想要浮点值而不是整数,请使用std::uniform_real_distribution
代替std::uniform_int_distribution
。
答案 2 :(得分:4)
这正是std::rand
的用途:
#include <cstdlib>
#include <ctime>
#include <iostream>
int main()
{
std::srand(static_cast<unsigned>(std::time(0))); // seed
for (int i = 5; i--;) std::cout << std::rand() % 5 << '\n';
// Output are random integers
}
的 Demo 强> 的
答案 3 :(得分:2)
使用单个隐式转换创建一个类
class t { operator int() { return 42; } };
int main()
{
t test; std::cout << t <<'\n';
return test;
}
当然,无论你想要什么其他成员,都没有其他转换操作符。
答案 4 :(得分:1)
这不适合其他随机代码...
#include <ctime>
#include <cstdlib>
struct RandomInt {
RandomInt() {
static bool initialized = (srand(std::time(0)), true);
}
operator int() {
return std::rand();
}
};
#include <iostream>
std::ostream& operator<<( std::ostream& stream, RandomInt x ) {
return stream << static_cast<int>(x);
}
int main() {
RandomInt randomInt;
std::cout << randomInt << "\n";
std::cout << randomInt << "\n";
std::cout << randomInt << "\n";
}
这是一个糟糕的主意。