首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于棋盘运动生成的C++动态存储

用于棋盘运动生成的C++动态存储
EN

Stack Overflow用户
提问于 2015-07-10 07:19:12
回答 3查看 469关注 0票数 1

我正在用C++编写一个国际象棋引擎,我目前正在进行移动生成。当移动生成时,我对如何存储移动感到困惑。我对C++比较陌生,但是是否有一些动态对象可以用来存储移动的到来(因为我不知道有多少)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-10 07:25:59

C++中有许多容器,取决于您可以使用std::vector或其他什么东西的情况。

至于选择一个容器将需要更多的信息,从您的象棋引擎(如它将调整多少次,是否可以添加在您的容器的前面和后面,等等),我们不能直接回答您提供的数据。

请看一看this question,以确定哪一个最适合您的情况。

票数 2
EN

Stack Overflow用户

发布于 2015-07-10 07:22:38

您正在寻找类似于std::vector的东西--一个表示大小动态变化的集合的模板:

向量是表示可以改变大小的数组的序列容器。 就像数组一样,向量对其元素使用相邻的存储位置,这意味着它们的元素也可以使用指向其元素的常规指针上的偏移量访问,并且与数组中的值一样有效。但是与数组不同的是,它们的大小可以动态变化,它们的存储由容器自动处理。

票数 2
EN

Stack Overflow用户

发布于 2015-07-10 08:10:44

许多国际象棋引擎大量使用递归。当你的想法,比方说5步前进时,你实际上进入了5个递归调用。如果输入调用,则函数调用的局部变量存储在堆栈中。因此,从理论上讲,只要有一个本地的“棋盘”,例如一个字段数组,每个字段都包含一块(或空的),因为所有棋盘都会自动保留在堆栈上,直到函数调用返回为止。由于堆栈空间通常是有限的,所以您还可以让每个调用(堆栈帧)只保存一个指向堆内存的指针,在输入函数时分配它,当您再次离开函数时释放它。每个函数调用在“更深”的递归级别上返回组合的“分数”(累积值)给调用者(像往常一样使用片段的值(典当= 1,皇后=9等))。您可以将它们存储在向量中,而不是分配单独的板。优点是你的记忆不太可能变得支离破碎。然后,每一次调用都可以在向量中保持其棋盘状态的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31334773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档