我想在其他两个向量中均匀分布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;
答案 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.