如何使用push_back将元素随机添加到向量中

时间:2013-06-27 01:10:05

标签: c++ class vector std

正如标题所述,我一直无法将随机数作为元素添加到整数类型的向量中。我将时间和stdlib库与矢量库结合使用。

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

通过引用将向量传递给将随机元素添加到向量中的函数。另外,传入一个对我想要更新的变量的引用,并使用在类中声明并在构造函数中定义的指针来保存变量的内存地址(在前面的行中引用的那个)。 / p>

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) << " ";
 }
 }

因此,在编译代码之后,向量中的元素都是相同的数字,而不是不同。我在编码中犯了什么错误?

2 个答案:

答案 0 :(得分:1)

一个问题是pPointergiveCardrefGiveCard可能不会引用相同的内存位置。正如jogojapan&amp; Karthik指出你也可能将值添加到不同的向量中。您没有显示所有代码,因此很难说清楚。假设他们都引用相同的内存位置,并且您将值添加到正确的向量中,则问题是由对srand()的调用引起的。

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

通常,您会在计划开始时或当您需要重新启用RNG时致电srand()

srand()playerHand()移除对populateHand()的来电,并将其放入main(),这样可以解决您的问题。

答案 1 :(得分:0)

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

还有一个事实是你正在添加一个不同于jogojapan所指出的矢量。