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

C++ create object array same random value

本文关键字:对象 数组 随机 C++ 创建      更新时间:2023-10-16
#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))

但他们没有工作。

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

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

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

具有相同种子的两个不同初始化将生成 在随后对兰德的调用中,结果的相同连续性

将 srand() 视为基于给定种子的随机数列表。由于您一直给它相同的种子,因此所有 rand() 调用都将获得列表中的第一个元素。解决方案是只调用 srand() 一次,每次要给 X 赋值时使用一次 rand() 调用