用于实现一副牌的链表和动态数组? C ++

时间:2014-05-27 21:36:56

标签: c++ dynamic linked-list stack

哪种方式可以更好地实现Magic the Gathering或Pokemon纸牌游戏? 我听说链接列表更快更有效地从卡片中添加/删除卡片;我听说动态数组搜索特定卡的速度更快。

你知道洗牌更快吗?

那么你认为我应该用它来创造一个游戏,比如口袋妖怪tcg http://hum1l1ation.hubpages.com/hub/PlayPoketcgDummy

我可以同时使用两者,还是卡片组只是一个堆栈?

到目前为止,我的设计将成为甲板类中卡片类的动态数组。

2 个答案:

答案 0 :(得分:4)

多少张牌?每张卡片有多大?除非是复制 非常昂贵(然后,如果你有C ++ 11,你应该是 能够使用移动语义),std::vector将是最好的 关于表现的选择(不是它可能做出的 用户的显着差异)。大多数经典 big-O分析因内存这一事实而失效 访问不是恒定的时间,而是取决于地点;越少 您使用的总内存,代码运行得越快。今天, 关于使用std::list的唯一原因是额外的 保证它提供有关的有效性 迭代器。

答案 1 :(得分:1)

就性能而言,你可能会发现不到100张卡片的差异太大了。

此外,如果您使用的是C ++ 11,那么标准库中会包含一个向量混洗,它非常有效:

void shuffle()
{
    std::random_device rd;
    auto seed = rd();
    std::mt19937 g(seed);
    std::shuffle(_deck.begin(), _deck.end(), g);
}