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

How to add elements randomly into a vector using push_back

本文关键字:添加 随机 向量 元素 何使用 push back      更新时间:2023-10-16

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

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

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

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

所以在我编译代码之后,向量中的元素都是相同的数字,并且没有不同。我在代码中犯了什么错误?

一个问题是pPointergiveCardrefGiveCard可能没有引用相同的内存位置。正如日本的jogojapan&Karthik指出,你也可能将这些值添加到不同的向量中。你没有显示所有的代码,所以很难判断。假设它们都do引用相同的内存位置,并且您将这些值添加到正确的向量中,则问题是由对srand()的调用引起的。

问题是,你几乎总是用相同的值为随机数生成器播种。这是因为当您调用time(0)时,它会返回以秒为单位的运行时间。当你反复快速调用它时,它会返回相同的值,直到时钟增加到下一秒。

通常,您会在程序开始时调用srand(),或者当您确实需要重新设定RNG的种子时。

playerHand()populateHand()中删除对srand()的调用,并将其放置在main()中,它应该会解决您的问题。

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

正如jogojapan所指出的,还有一个事实是,你正在添加一个与你预期不同的向量。