C ++从Vector

时间:2017-04-22 20:45:32

标签: c++ vector random integer

有人可以帮我找出一种方法,从按顺序排列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]; 
    }
}

所以我此时已创建骰子,但无法弄清楚如何从向量的后半部分获取随机值。

1 个答案:

答案 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);