【发布时间】:2014-03-27 06:41:27
【问题描述】:
我正在尝试为一副纸牌实现一个类。 “deck”包含的功能之一是随机播放。
void deck::shuffle()
{
int cardsleft = deck::cards;
for(int i = 0; i < cardsleft ; i++)
{
srand(time(NULL));
int rdmn = rand() % cardsleft;
card tempcard = deck::dcards[rdmn];
deck::dcards[rdmn] = deck::dcards[i];
deck::dcards[i] = tempcard;
}
}
为了清楚起见,deck::cards 是一个整数计数。在这个牌组中剩下的牌,deck::dcards 是这个牌组中牌的数组。
我的问题是:这不会产生很好的结果。难道我需要通过指针来做这个,传递引用?如果是这样,它是如何完成的?
或者,它可能只是糟糕的算法吗?也许我只需要一个更好的洗牌逻辑。请说。注意:是的,我知道“algorithm.h”库中有一个 std::shuffle std::random_shuffle 函数,但这些只适用于向量,而不是我在这里使用的数组,不是吗?
更新:nvm,我刚刚意识到我的问题可以在这里回答: http://blog.codinghorror.com/the-danger-of-naivete/
所以这是一个逻辑缺陷,而不是我的实现。
【问题讨论】:
-
std::random_shuffle和std::shuffle适用于任何随机访问范围。数组是一个随机访问范围。
标签: c++ performance algorithm logic shuffle