在向量中均匀分布数据

时间:2014-07-23 14:49:09

标签: c++ vector

我想在其他两个向量中均匀分布52个数字的向量。这样每个相应的矢量将具有从主矢量中随机获得的26个值。即在这种情况下它是storein

vector<int>p1;
vector<int>p2;

for(int i=0;i<=storein.size();i++)  //storein has a size of 52
{
int a=rand()%storein.size()+1;
int b=rand()%storein.size()+1;
if(a!=0)
{
cout<<"First player draw"<<endl;
p1.push_back(a);
cout<<p1[i]<<endl;
}

if(b!=0)
{
cout<<"Second player draw"<<endl;
p2.push_back(b);
cout<<p2[i]<<endl;
}
}

cout<<"p1 "<<p1.size()<<" p2 "<<p2.size()<<endl;

1 个答案:

答案 0 :(得分:3)

您只需将输入向量随机播放,然后将前26个条目放在p1中,将最后一个放入p2

std::mt19937 rd{std::random_device{}()};
std::shuffle(input_vec.begin(),input_vec.end(),rd);

std::vector<int> p1 {input_vec.begin(),input_vec.begin()+26};
std::vector<int> p2 {input_vec.begin()+26, input_vec.end()};

如果您不想更改input_vec,请复制一份。

请注意,这种播种mt19937的方式可能不太理想,因为它的状态空间比32位种子大得多。这对于玩具程序和标准编程任务来说无关紧要,但为了完整起见:Here是我对整个状态空间进行适当播种的看法。

最后一句话:请勿使用rand()it is bad.