C+中的功能数据结构+; 有人知道C++数据结构库提供了熟悉的STL结构的函数(A.K.不可变的或“持久的”)等价的?

C+中的功能数据结构+; 有人知道C++数据结构库提供了熟悉的STL结构的函数(A.K.不可变的或“持久的”)等价的?,c++,data-structures,functional-programming,boost-phoenix,C++,Data Structures,Functional Programming,Boost Phoenix,所谓“功能性”是指对象本身是不可变的,而对这些对象的修改会返回新对象,这些对象在适当的情况下与父对象共享相同的内部结构 理想情况下,这样的库将类似于STL,并与Boost.Phoenix配合使用(注意-我实际上没有使用Phoenix,但据我所知,它提供了许多算法,但没有数据结构,除非对现有数据结构的延迟计算更改算数-是吗?)我会看看Yannis Smaragdakis开发的软件是否包含任何数据结构。当然,这个项目比其他任何一个都支持C++中的函数样式。 这比一个详细的答案更为重要,但Bartos

所谓“功能性”是指对象本身是不可变的,而对这些对象的修改会返回新对象,这些对象在适当的情况下与父对象共享相同的内部结构


理想情况下,这样的库将类似于STL,并与Boost.Phoenix配合使用(注意-我实际上没有使用Phoenix,但据我所知,它提供了许多算法,但没有数据结构,除非对现有数据结构的延迟计算更改算数-是吗?)

我会看看Yannis Smaragdakis开发的软件是否包含任何数据结构。当然,这个项目比其他任何一个都支持C++中的函数样式。

这比一个详细的答案更为重要,但Bartosz Milewski似乎已经为此做了大量工作。例如,见:

看起来他在Okasiki的书《纯函数数据结构》中实现了很多算法:

N.B.我还没有尝试过这些,但是它们是我在FC++.P/>之外看到的第一个C++持久数据结构。


希望我很快就能开始尝试它们。

如果我能够承受性能和内存开销,那么通过传递和返回所有对象的值,您能否获得大致所需的效果。功能数据结构的诀窍在于,它们尽可能共享内部结构。这样做是安全的,因为对象是不可变的,并且与在大型数据结构上仅按值返回相比,占用内存和处理器的空间要少得多。我当时的结论是,您确实需要垃圾收集:持久化结构的优势在于共享,但在共享的情况下,不再有任何单个节点的明确所有权,因此某种中央机构(GC)必须决定哪些节点可以回收。或者,对于您的应用程序来说,节点只被分配而从不释放并不重要。当然,您可以有或多或少的特殊GC(引用计数,或保守GC,如Boehm),但是一种专为内存管理的优点和缺点而设计的语言使事情变得更简单、更有效。@Pascal对于许多函数类型,没有GC就可以使用shared_ptr。我所遇到的问题是,许多函数类型使用懒惰,这可能会导致大量的C++代码来表示thunk。其中有一个持久列表数据类型,但它似乎不适合在FC++之外的一般用途。它们似乎缺少重要的部分。。。类删除