gpt4 book ai didi

c++ - 在循环构造函数调用中创建的对象的拷贝

转载 作者:行者123 更新时间:2023-11-30 01:45:26 24 4
gpt4 key购买 nike

我已经定义了一个类,然后使用数组中的构造函数创建了它的实例。出于某种原因,这只会创建实例,尽管所有实例都是随机的,但其中许多实例最终都具有完全相同的属性。这是构造函数。

class fNNGA: public fNN
{
public:
fNNGA()
{

}

fNNGA(int n)
{
int i;

_node.resize(n);

for(i = 0; i < n; i++)
{
_node[i]._activation = -1;
}
}

fNNGA(int n, int inp, int out, int edge)
{
int i,u,v;

_node.resize(n);

for(i = 0; i < n; i++)
{
_node[i]._activation = 1;
}

for(i = 0; i < inp; i++)
{
setInput(i);
}

for(i = n - out; i < n; i++)
{
setOutput(i);
}

for(i = 0; i < edge; i++)
{
v = rand() % (n - inp) + inp;
u = rand() % v;

setEdge(u,v);
}

init();
}
};

这些是我一直在尝试创建数组的一些方法:

fNNGA pop[SIZE];

int main()
{
for(int i = 0; i < SIZE; i++)
{
pop[i] = fNNGA(100,16,8,800);
}
}

,

fNNGA *pop[SIZE];

int main()
{
for(int i = 0; i < SIZE; i++)
{
pop[i] = new fNNGA(100,16,8,800);
}
}

,

fNNGA *pop = new fNNGA[SIZE];

int main()
{
for(int i = 0; i < SIZE; i++)
{
new(pop[i]) fNNGA(100,16,8,800);
}
}

我怎样才能正确地创建这些对象?

最佳答案

不要在构造函数中调用srand。请记住,在大多数平台上,time 函数返回以 为单位的时间,因此如果您的构造函数在一秒内被调用多次(很可能发生),那么所有这些调用都会调用 srand 并设置完全相同的种子。

仅在程序开始时调用srand一次。或者使用新的 pseudo-random number generating classes在 C++11 中引入。

关于c++ - 在循环构造函数调用中创建的对象的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com