我在生成随机数时遇到问题,我已经通读了关于 SO 的大多数帖子,但似乎没有一个解决方案有效。 请在将其标记为重复之前通读它
我有一个仿函数来生成 0.5 到 -0.5 之间的随机数:
struct randomize
{
__host__ void operator()( double &x ) const {
x=(double) (rand() % 1000000) / 1000000 - 0.5;
}
};
我通过 for_each
调用它,如下所示:
thrust::for_each(myVector.begin(),myVector.end(),randomize());
它又在类的构造函数中被调用(假设是 myClass),它被称为:
myObjs=std::vector<myClass>(20,myClass(no_of_inputs));
问题是所有 myClass' 对象中的所有
myVectors`myVector
都填充了同一组值。
这些值随每次运行而变化,但在所有
我知道 rand()
是一个伪随机数生成器,它生成的数字不能指望是真正随机的。但是这太巧合了。
澄清一下:
- 我在整个程序中只调用了一次
srand(time(NULL))
。 - 我使用的是 thrust::for_each 而不是 std::for_each 但这应该不会有太大区别
- 我知道随机仿函数远非完美,但我正在修改并除以 1000000 以获得小数点后的 6 位数字。如果您能指出更好的方法,那就太好了,但请不要被它冲昏头脑。
- 我不能使用 c++11(目前)或 boost(根本)
- 我不能为 myClass 使用默认构造函数
- 我将不胜感激不需要我过多更改代码结构的解决方案
最佳答案
myObjs=std::vector<myClass>(20,myClass(no_of_inputs));
你为myClass
定义了一个复制构造函数吗?随机化数据? (然而,在我看来,这违背了复制构造函数的目的)
如果不是,那么您正在复制相同的 myClass
20次入myObj
和 vector<myClass>
将通过调用每个元素的默认复制构造函数来构造,这反过来将简单地复制 myVector
中的数据。 .
关于c++ - rand() 在通过仿函数调用时生成相同的随机数集(即使在使用 srand(time(NULL)) 播种后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923551/