哪种方式可以更好地实现Magic the Gathering或Pokemon纸牌游戏? 我听说链接列表更快更有效地从卡片中添加/删除卡片;我听说动态数组搜索特定卡的速度更快。
你知道洗牌更快吗?
那么你认为我应该用它来创造一个游戏,比如口袋妖怪tcg http://hum1l1ation.hubpages.com/hub/PlayPoketcgDummy
我可以同时使用两者,还是卡片组只是一个堆栈?
到目前为止,我的设计将成为甲板类中卡片类的动态数组。
答案 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);
}