Rust中的入侵算法等价物

Intrusive algorithms equivalents in Rust

本文关键字:算法 等价物 入侵 Rust      更新时间:2023-10-16

我正在研究Rust编程语言,并试图将我的C++思想转换为Rust。常见的数据结构,如列表和树,以前已经在C++中用指针实现了,我不确定如何在Rust中实现确切的等价物。我感兴趣的数据结构是侵入式算法,类似于Boost侵入式库中的算法,这些算法在嵌入式/系统编程中很有用。

Rust(Dlist)中的链表示例非常直接,但它使用了一个容器类型,其中实际类型在容器中。我正在寻找的侵入式算法有点相反:您有一个插入或继承列表节点的主类型。

此外,Linux中著名的链表也是列表数据位于结构成员中的另一个例子。这类似于Boost成员的侵入式算法变体。这使您可以多次在多个列表/树中使用您的类型。这将如何与Rust配合使用?

所以我不确定如何将这些设计模式转换为我在C/C++中习惯的Rust。有谁成功地理解了这一点?

Rust希望您考虑所有权和寿命。谁拥有这些会员,他们能活多久?

在Dlist的问题中,答案是"容器"。对于侵入式算法,没有明确的答案。一个列表的成员可能会在另一个列表中被重用,而其他成员则会随着第一个列表而被销毁。最终,您可能希望使用引用计数(std::sync::Arc)。

我认为有两种方法可以在Rust中实现类似的功能。让我们来看看图的实现,它通常使用侵入式链接。

第一种方法依赖于Rc<RefCell<Node>>。您可以在这里找到更多详细信息:图表和竞技场分配

第二种方法依赖于向量索引。您可以在这里找到更多信息:使用矢量索引在Rust中建模图。

我相信第二种方法更好,但我没有做任何测试。