C ++获取一个尚未在向量中使用的随机值

时间:2012-09-09 00:13:23

标签: c++ vector iteration

我正在制作一个tic tac toe游戏,我现在正在制作玩家的对手。如你所知,tic tac toe match有9个字段,所以我制作了一个包含其他X和O已经使用的所有字段的向量。

std::vector<int> UsedPositions;

所以在我尝试使用srand(time())获取随机值并迭代向量以检查该位置是否已被使用之前。它实际上工作但是,你可以想象,我的可怜的CPU花了很多计算(因此时间),因为如果向量有大约8个元素,那就意味着它必须迭代8次(即IF是随机数是不同的,否则它将不得不经历另外8次)。

TL; DR - 如何获得&lt; 10&amp;&amp; &GT; 0来自向量?

代码对我来说很慢:

int FindUniqueAnswer()
{
    int answer;
    bool AnswerFound = false;

    while(!AnswerFound)
    {
        bool DoesntEqual = true;
        srand(time(0));
        int random = rand()%10;
        if(random == 0)
        {
            random++;
        }

        for(int i = 0;i<UsedPositions.size();i++)
        {
            if(random == UsedPositions.at(i))
            {
                DoesntEqual = false;
                break;
            }
        }
        if(DoesntEqual)
        {
            answer = random;
            AnswerFound = true;
        }
    }

    return answer;
}

1 个答案:

答案 0 :(得分:2)

#include <random>
#include <algorithm>
...
vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
std::random_device rd
mt19937 g(rd());
shuffle(v.begin(), v.end(), g);

从cppreference.com复制