列出一个结构,持有多个迭代,无论是按值还是通过引用

问题描述 投票:0回答:1

,我们有两种类型:

pub struct MyElement {
   a: Box<int>,
   b: Box<int>,
}

pub struct MySet {
   as: Box<[int]>,
   bs: Box<[int]>,
}

如何,无需克隆/复制,可以实现:

  1. MySet.into_iter()
    产生类型的项目
    MyElement
  2. MySet.iter()
    产生类型的项目
    &MyElement
rust iterator
1个回答
0
投票

如果我们将“不克隆/复制”解释为“而不创建从现有的盒子中克隆的新盒子或将ints复制到新盒子中”,则不可能。如果您可以将整数复制到新框中,支付内存分配成本,这将变得很容易。

myset.into_iter()产生型骨髓的项目?

如果不复制和进行新的分配,就无法创建必要的单个盒子。鉴于通过全球分配器分配的整数片,您和标准库都不能将其转变为一堆单独的分配,然后可以分别进行分配 - 如此小的分配既没有rust分配器性状的先决条件,也不能做任何分配他们在许多现实世界中的内存分配器上工作(例如,想象一个现实世界中的分配器,该分配器分配了一个大切片的页面,但现在被要求放小分配给他们不属于的免费列表,如果没有附近的正确元数据)

Myset.iter()产生类型和髓样品?

等,您需要一个带有两个盒子的布局来参考的结构,您没有一个,并且不能产生一个。

这里的一个关键发现是,Myelement试图做太多以至于无法以这种方式使用 - 它试图持有单个元素,并拥有它们。相反,可以使用具有适当寿命注释的类型,可以使用对原始切片进行引用,具体取决于问题中的(未阐明的)其他上下文。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.