4

常に変化する擬似乱数整数を作成するにはどうすればよいですか? このようにして、次のように入力できます。

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

プログラムは次のようなものを返します。

45.7
564.89
1.64

(これが意味をなすかどうかはわかりません。)

4

5 に答える 5

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

于 2012-12-30T21:49:09.083 に答える
5

新しいC++11 疑似乱数生成クラスの使用:

#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';
}

上記は、サイコロを 10 回振ることをシミュレートしています。

整数の代わりに浮動小数点値が必要な場合は、std::uniform_real_distribution代わりに を使用しstd::uniform_int_distributionます。

于 2012-12-30T21:46:14.493 に答える
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
}

デモ

于 2012-12-30T21:45:02.557 に答える
2

単一の暗黙的な変換でクラスを作成する

class t { operator int() { return 42; } };

int main()
{
    t test; std::cout << t <<'\n';
    return test;
}

もちろん、あなたが望む他のメンバーは何でも、他の変換演算子はありません。

于 2012-12-30T22:04:57.007 に答える
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";
}

これはかなり悪い考えです。

于 2012-12-30T21:51:01.920 に答える