C++ 生成C+中从-K到K的随机数(大小为M)的向量+;

C++ 生成C+中从-K到K的随机数(大小为M)的向量+;,c++,c,linux,unix,C++,C,Linux,Unix,有没有一种快速的方法可以做到这一点?我想您可以通过以下方式来实现: for(int i=0;i

有没有一种快速的方法可以做到这一点?

我想您可以通过以下方式来实现:

for(int i=0;i

但是我需要更多地了解你的问题。间隔是[-K,K]还是(-K,K)?你是否包括-K和K?

我想你可以用以下方法来实现:

for(int i=0;i


但是我需要更多地了解你的问题。区间是[-K,K]还是(-K,K)?你是否包括-K和K?

我建议使用生成均匀随机变量。如果生成均匀偏差u~[0,1],那么(2*K)*u-K将是~[-K,K].

我建议使用生成均匀随机变量。如果生成均匀偏差u~[0,1],则(2*K)*u-K将为~[-K,K].

您能提供一个例子吗?另外,您的数字需要多大的随机性?您关心
M
数字是否唯一吗?您能提供一个例子吗?您的数字需要多大的随机性?您关心
M
数字是否唯一吗?如果输出间隔的大小不同,使用模会使结果产生偏差不均匀地划分
RAND_MAX
。是的,这是正确的。记住这一点,永远不要画画。对于较小的K,它的偏差较小,但当你接近RAND的最大值时,你会把事情搞得一团糟!小点,但你可能希望v.reserve(M);在循环之前,所以向量不会反复地重新定位,直到它足够大为止。(在大多数情况下,容量将增长到超过M)@乔希:谢谢。是的,包括了K和K。而且,
rand
通常是一个可怕的随机数生成器。不要使用它。如果输出间隔的大小不能均匀地除以
rand\u MAX
,那么使用模会使结果产生偏差。是的,这是正确的。记住这一点,永远不要画画。对于较小的K,偏差会更小,但当你接近它时rand的最大值,你会把事情搞砸的!小点,但你可能想v.reserve(M);在循环之前,所以向量不会反复地重新定位,直到它足够大。(在大多数情况下,容量会增长到大于M)@乔希:谢谢。是的,包括K和K。而且,
rand
通常是一个可怕的随机数生成器。不要用它。我想一些穿制服的人会去附近的私立学校。我想一些穿制服的人会去附近的私立学校。
for (int i = 0; i < M; i++)
{
  v.push_back(rand()%(2*K)-K;
}