Rust中的入侵算法等价物
Intrusive algorithms equivalents in Rust
我正在研究Rust编程语言,并试图将我的C++思想转换为Rust。常见的数据结构,如列表和树,以前已经在C++中用指针实现了,我不确定如何在Rust中实现确切的等价物。我感兴趣的数据结构是侵入式算法,类似于Boost侵入式库中的算法,这些算法在嵌入式/系统编程中很有用。
Rust(Dlist)中的链表示例非常直接,但它使用了一个容器类型,其中实际类型在容器中。我正在寻找的侵入式算法有点相反:您有一个插入或继承列表节点的主类型。
此外,Linux中著名的链表也是列表数据位于结构成员中的另一个例子。这类似于Boost成员的侵入式算法变体。这使您可以多次在多个列表/树中使用您的类型。这将如何与Rust配合使用?
所以我不确定如何将这些设计模式转换为我在C/C++中习惯的Rust。有谁成功地理解了这一点?
Rust希望您考虑所有权和寿命。谁拥有这些会员,他们能活多久?
在Dlist的问题中,答案是"容器"。对于侵入式算法,没有明确的答案。一个列表的成员可能会在另一个列表中被重用,而其他成员则会随着第一个列表而被销毁。最终,您可能希望使用引用计数(std::sync::Arc)。
我认为有两种方法可以在Rust中实现类似的功能。让我们来看看图的实现,它通常使用侵入式链接。
第一种方法依赖于Rc<RefCell<Node>>
。您可以在这里找到更多详细信息:图表和竞技场分配
第二种方法依赖于向量索引。您可以在这里找到更多信息:使用矢量索引在Rust中建模图。
我相信第二种方法更好,但我没有做任何测试。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- python集合的C++等价物是什么.计数器
- 具有非整数边容量的最大流量的Dinic算法
- 到连接组件算法的问题(递归)
- STL算法函数在多个一维容器上的使用
- 读取最后一行代码算法 - c++ 时出现问题
- 如何有效地存储等价物(来自Connected component标签算法)
- Rust中的入侵算法等价物