我正在用C++编写一个国际象棋引擎,我目前正在进行移动生成。当移动生成时,我对如何存储移动感到困惑。我对C++比较陌生,但是是否有一些动态对象可以用来存储移动的到来(因为我不知道有多少)。
发布于 2015-07-10 07:25:59
C++中有许多容器,取决于您可以使用std::vector或其他什么东西的情况。
至于选择一个容器将需要更多的信息,从您的象棋引擎(如它将调整多少次,是否可以添加在您的容器的前面和后面,等等),我们不能直接回答您提供的数据。
请看一看this question,以确定哪一个最适合您的情况。
发布于 2015-07-10 07:22:38
您正在寻找类似于std::vector的东西--一个表示大小动态变化的集合的模板:
向量是表示可以改变大小的数组的序列容器。 就像数组一样,向量对其元素使用相邻的存储位置,这意味着它们的元素也可以使用指向其元素的常规指针上的偏移量访问,并且与数组中的值一样有效。但是与数组不同的是,它们的大小可以动态变化,它们的存储由容器自动处理。
发布于 2015-07-10 08:10:44
许多国际象棋引擎大量使用递归。当你的想法,比方说5步前进时,你实际上进入了5个递归调用。如果输入调用,则函数调用的局部变量存储在堆栈中。因此,从理论上讲,只要有一个本地的“棋盘”,例如一个字段数组,每个字段都包含一块(或空的),因为所有棋盘都会自动保留在堆栈上,直到函数调用返回为止。由于堆栈空间通常是有限的,所以您还可以让每个调用(堆栈帧)只保存一个指向堆内存的指针,在输入函数时分配它,当您再次离开函数时释放它。每个函数调用在“更深”的递归级别上返回组合的“分数”(累积值)给调用者(像往常一样使用片段的值(典当= 1,皇后=9等))。您可以将它们存储在向量中,而不是分配单独的板。优点是你的记忆不太可能变得支离破碎。然后,每一次调用都可以在向量中保持其棋盘状态的索引。
https://stackoverflow.com/questions/31334773
复制相似问题