我正在制作一个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;
}
答案 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复制