我创建了一个使用5X5数组和向量的混洗程序。向量应存储值1到25(包括1和25),并且每个元素的数组应该只有0。一旦传递了shuffle()函数,它应该随机定位数组中向量的1到25个值。
void Match::shuffle() {
std::vector<int> vec(25);
int randNum = rand() % (vec.size());
for (int i = 1; i < 26; i ++) {
vec.push_back(i);
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
backArr[i][j] = vec.at(randNum);
vec.erase(vec.begin() + randNum);
randNum = rand()%vec.size();
}
}
}
答案 0 :(得分:0)
在上次运行中(即设置backArr[i][j]
后),您从向量中移除最后一个元素并计算randNum = rand()%vec.size();
,计算rand() % 0
将失败。
只需在randNum
之前计算backArr[i][j] = vec.at(randNum);
(同时删除循环前的randNum
)。
附录:正如@infixed在评论中指出的那样,你还创建了一个25(默认初始化)元素的向量,然后推送了25个额外的元素(由于这个,第一部分,我的回答其实并非如此)。
要解决这个问题,您需要在声明(25)
时删除vec
,或者通过相应的向量访问替换push_back
指令(请注意1之后)。
答案 1 :(得分:0)
为什么不使用std :: random_shuffle?