C ++创建对象数组相同的随机值

时间:2017-11-01 22:37:25

标签: c++ c++11 object

#include <iostream>
#include <string>

#include <time.h>

using namespace std;

class A{
    int x;
    public:
    void setX(){
        srand( time(NULL));
        x = rand() % 15;    
    }
    int getX(){
        return x;
    }


};

int main()
{
    A dizi[5];
    for(int i = 0; i < 5;i++){
        dizi[i].setX();
        cout<<dizi[i].getX()<<endl;
    }
}

#include <iostream>
#include <string>
#include <time.h>

using namespace std;

class A{
    int x;
    public:
        void setX(){
            srand( time(NULL));
            x = rand() % 15;    
        }
        int getX(){
            cout<<x<<endl;
        }    
    };

    int main()
    {
        A dizi[3];
       dizi[0].setX();
       dizi[1].setX();
       dizi[2].setX();
       dizi[0].getX();
       dizi[1].getX();
       dizi[2].getX();
    }

x始终打印相同的值。如何为数组的每个对象分配不同的随机值。

我尝试过srand(time(0))和srand(time(NULL))

但他们没有工作。

每个类实例产生相同的随机值,为什么?

1 个答案:

答案 0 :(得分:3)

来自C ++文档:http://www.cplusplus.com/reference/cstdlib/srand/

  

对于调用srand时使用的每个不同的种子值,   可以预期伪随机数发生器产生不同的   在随后的rand调用中继续产生结果。

     

使用相同种子的两个不同初始化将生成   在随后的rand调用

中产生相同的连续结果

将srand()视为根据给定种子制作随机数列表。由于你不断给它提供相同的种子,所以所有的rand()调用都获得了列表中的第一个元素。解决方案只是调用srand()一次,并在每次要为X赋值时使用一个rand()调用