有人可以帮我找出一种方法,从按顺序排列N值的向量中返回一个值。返回值必须在集合的上半部分。
例如,
如果有一个包含以下整数的向量: {1,2,3,4,5,6}
从{4,5,6}返回一个随机整数。我很难过!
最终目标是创建一个加权模具"其中roll的值返回更高的值。我的解决方案是前面提到的载体的使用。
void LoadedDie::loadedRoll(int numberOfSides)
{
vector<int> diceSides(numberOfSides+1);
for (int index = 1; index < numberOfSides+1; index ++)
{
diceSides[index]=index;
}
for (int index=1; index < numberOfSides+1; index ++)
{
cout << diceSides[index];
}
}
所以我此时已创建骰子,但无法弄清楚如何从向量的后半部分获取随机值。
答案 0 :(得分:0)
您可以在一个范围内生成一个随机整数,并使用下标运算符来访问您的向量。
int max = yourVector.size()-1; //-1 to stay in range
int min = max/2;
int randIndex = min + (rand() % (int)(max - min + 1));
yourVector[randIndex]; // this is a random int in your vector
这有点偏颇,因此您可以将以下内容用于未提供的内容:
#include <random>
int max = yourVector.size()-1; //-1 to stay in range
int min = max/2;
std::random_device seed; // initialise a seed once
std::mt19937 numberGen(seed());
std::uniform_int_distribution<int> gen(min,max);
int randIndex = gen(numberGen);
yourVector[randIndex]; // this is a random int in your vector
修改强>
根据建议你可以使用std :: vector中的.at()函数是安全的:
yourVector.at(randIndex);