0

正如标题所述,我在将随机数作为元素添加到整数类型的向量中时遇到了麻烦。我包含了 time 和 stdlib 库以与向量库一起工作。

到目前为止,我的尝试(使用课程)是:

通过引用将向量传递到将随机元素添加到向量中的函数中。此外,传递对我要更新的变量的引用,并使用在类中声明并在构造函数中定义的指针来保存变量的内存地址(与前几行中引用的相同)。

class PlayerHand

{ 
     public:
           playerHand();
           void populateHand(vector<int>&, int&)

     private:
             vector<int> &refVector; 
             int *pPointer;
             int giveCard;
 };

playerHand::playerHand()

{
   srand((time(NULL)));     
   giveCard = (rand() % 14) + 1;

   pPointer = &giveCard;
}


void playerHand::populateHand(vector<int> &refVector, int &refGiveCard)

{ for( int i = 0; i <= 8; i++)
{

    refVector.push_back(*pPointer); //dereference thepointer to store value in giveCard
    srand(time(0));                      
    refGiveCard = (rand() %14) + 1;  /*Here is where I'm trying to update the reference
                                     so before the next loop, the reference should have
                                     a new updated value*/

    cout << refVector.at(i) << " ";
 }
 }

所以在我编译完代码之后,vector中的元素都是同一个数,没有区别。我在代码中犯了什么错误?

4

2 回答 2

1

一个问题是pPointer,giveCardrefGiveCard可能不会引用相同的内存位置。正如 jogojapan & Karthik 指出的那样,您可能还将这些值添加到不同的向量中。您没有为此显示所有代码,因此很难说。假设它们都确实引用了相同的内存位置,并且您将值添加到正确的向量中,您的问题是由对srand().

问题是您 [几乎] 总是用相同的值播种随机数生成器。这是因为当您调用time(0)它时,它会以秒为单位返回经过的时间。当您重复且非常快速地调用它时,它将返回相同的值,直到时钟增加到下一秒。

通常,您会srand()在程序开始时或确实需要重新设置 RNG 时调用。

删除对srand()from的调用playerHand()并将populateHand()其放入main(),它应该可以解决您的问题。

于 2013-06-27T01:37:17.200 回答
0

您正在更新refGiveCard,但您正在添加giveCard。因此它们都是相同的值。

正如 jogojapan 指出的那样,还有一个事实是,您添加的向量与您可能期望的不同。

于 2013-06-27T01:14:43.230 回答