如何使用push_back将元素随机添加到向量中
How to add elements randomly into a vector using push_back
正如标题所说,我在将随机数作为元素添加到整数类型的向量中时遇到了麻烦。我包含了与向量库协同工作的时间库和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) << " ";
}
}
所以在我编译代码之后,向量中的元素都是相同的数字,并且没有不同。我在代码中犯了什么错误?
一个问题是pPointer
、giveCard
和refGiveCard
可能没有引用相同的内存位置。正如日本的jogojapan&Karthik指出,你也可能将这些值添加到不同的向量中。你没有显示所有的代码,所以很难判断。假设它们都do引用相同的内存位置,并且您将这些值添加到正确的向量中,则问题是由对srand()
的调用引起的。
问题是,你几乎总是用相同的值为随机数生成器播种。这是因为当您调用time(0)
时,它会返回以秒为单位的运行时间。当你反复快速调用它时,它会返回相同的值,直到时钟增加到下一秒。
通常,您会在程序开始时调用srand()
,或者当您确实需要重新设定RNG的种子时。
从playerHand()
和populateHand()
中删除对srand()
的调用,并将其放置在main()
中,它应该会解决您的问题。
您正在更新refGiveCard
,但正在添加giveCard
。因此,它们都具有相同的价值。
正如jogojapan所指出的,还有一个事实是,你正在添加一个与你预期不同的向量。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 将集合的随机元素添加到列表中,然后将其从原始集合中移除
- 随机添加到字符串C++的空字符
- 有没有办法在值数组中随机添加或减去两个特定数字或更多
- 编译器将随机字符添加到我的 char 数组中
- 将作为数学运算符的字符添加到随机字符串中
- 快速在C 中添加随机变量
- C++将字符从静态数组复制到动态数组会添加一堆随机元素
- 在使用 BOOST 图形库生成的图形中添加随机边
- 如何将元素添加到二维数组/矩阵的随机位置
- 添加函数数组并随机选择其中一个
- 在 C++ 程序中添加时随机标头不起作用
- 如何使用双向搜索按字母顺序将随机字符串添加到数组中
- 如何使用push_back将元素随机添加到向量中
- 如何将随机字符串从2d数组添加到1d数组[c++]
- 为什么当我将数字添加到字符串时,它在c++中显示随机文本
- 在c++中调用函数时未定义的符号添加随机字符
- 我应该使用哪个容器进行随机访问,廉价的添加和删除(没有取消/分配),具有已知的最大大小
- 向字符串数组中添加随机字符