制作一个永久变化的随机整数?

时间:2012-12-30 21:42:59

标签: c++ random integer

如何创建一个不断变化的伪随机整数? 这样,我可以输入:

cout << randomInt << endl;
cout << randomInt << endl;
cout << randomInt << endl;

并且该程序将返回如下内容:

45.7
564.89
1.64

(我不确定这是否有任何意义。)

5 个答案:

答案 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";
}

这是一个糟糕的主意。