2016-09-27 146 views
-2

我创建了一个使用5X5阵列和矢量的混洗程序。向量应该存储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(); 
      } 
    } 

}

+2

当问题陈述简单地说“它不起作用”时,很难提供解决方案。请[编辑]您的问题,以更全面地描述您预期会发生什么以及与实际结果有何不同。看[问]提示什么是一个很好的解释。 –

+0

[MCVE]是必要的。 –

+0

http://stackoverflow.com/questions/6127503/shuffle-array-in-c。这可能有助于 –

回答

0

在最后一次运行(backArr[i][j]已被设置,即,后)从载体中删除最后元件和计算randNum = rand()%vec.size();其计算rand() % 0将失败。

只需在backArr[i][j] = vec.at(randNum);之前计算randNum(也可以在循环前删除randNum)。

附录:正如在评论@infixed指出的那样,你还可以创建25个(默认初始化)元素的向量,后来推额外的25个元素(由于这一点,我的回答的第一部分实际上是不对)。 为了解决这个问题,您需要在声明vec时删除(25),或者通过相应的向量访问来替换push_back指令(请注意关闭1)。

+0

非常感谢您的帮助。 – Drew

0

为什么不使用std :: random_shuffle?

+0

我想避免使用std:random_shuffle – Drew