2017-04-22 72 views
-2

有人可以帮助我找出一种方法来从具有N个值的矢量按顺序返回一个值。返回值必须在集合的上半部分。C++从矢量的子集中返回一个随机值

例如,

如果具有包含以下的整数的向量: {1,2,3 4,5,6}

返回从一个随机整数{4,5,6} 。我很难过!

最终目标是创建一个“加权模具”,其中滚动值返回更高的值。我的解决方案是上述使用矢量。

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

我创建了我的矢量,但只需要指导如何在给定索引处开始搜索我的矢量,然后使用rand()来获取值。我是一个初学者,无法将头围绕在它周围。 – MJ1986

+0

然后显示你的代码,有些东西比没有东西好...尽管发布代码种类显示明显。 –

回答

1

您可以在一个范围内生成一个随机整数,并使用下标运算符来访问您的矢量。

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 

EDIT

如所建议可以使用.AT()函数在STD: :矢量要安全:

yourVector.at(randIndex); 
+1

但是,如果矢量更改,按索引访问它可能是危险的。通过使用at()来访问它更安全。 –

+0

啊好吧,那真的有帮助。 – MJ1986

+0

@Evan补充回答,谢谢。 – nitronoid