gpt4 book ai didi

vector - 对于每个结构都包含结构数组子集的结构向量,正确的模式是什么?

转载 作者:行者123 更新时间:2023-12-03 11:49:18 24 4
gpt4 key购买 nike

我的代码与以下代码非常相似(尽管我的过滤器功能更复杂):

struct MyStruct {
a: i32,
b: i32,
count: i32,
}

impl MyStruct {
fn filter(&self) -> bool {
return self.a > self.b + self.count;
}
}
struct ContainerStruct<'a> {
x: i32,
v: Vec<&'a MyStruct>,
}

fn main() {
let mut list_of_items = vec![
MyStruct {
a: 1,
b: 2,
count: 0,
},
MyStruct {
a: 2,
b: 1,
count: 0,
},
MyStruct {
a: 5,
b: 2,
count: 0,
},
];
let mut count = 0;
let mut list_of_containers: Vec<ContainerStruct> = Vec::new();
while count < 10 {
let mut c = ContainerStruct {
x: 1,
v: Vec::new(),
};

for i in list_of_items.iter_mut() {
i.count = count;
if i.filter() {
c.v.push(i);
}
}
count += 1;
list_of_containers.push(c)
}
}

由于出现以下错误而无法编译:

error[E0499]: cannot borrow `list_of_items` as mutable more than once at a time
--> src/main.rs:43:18
|
43 | for i in list_of_items.iter_mut() {
| ^^^^^^^^^^^^^ mutable borrow starts here in previous iteration of loop

我知道这是一个借阅检查问题,我可以看到引用等方面的潜在问题。我不知道是用于实现所需内容的正确模式,它本质上是结构的向量,其中每个结构都包含结构数组的子集。

我需要能够对结构进行变异,因此我不得不使用 iter_mut()

但是,这会将向量移到该范围内,然后在下次我通过外部while循环时释放该向量。

有什么方法可以迫使向量生存足够长的时间以完成外循环?我曾考虑过复制结构,但我不想这样做。我只需要引用每个引用,由于有问题的向量的大小,复制会带来 Not Acceptable 开销。

最佳答案

编译如下:

use std::cell::Cell;

struct MyStruct {
a: i32,
b: i32,
count: Cell<i32>,
}

impl MyStruct {
fn filter(&self) -> bool {
return self.a > self.b + self.count.get();
}
}
struct ContainerStruct<'a> {
x: i32,
v: Vec<&'a MyStruct>,
}

fn main() {
let mut list_of_items = vec![
MyStruct {
a: 1,
b: 2,
count: Cell::new(0),
},
MyStruct {
a: 2,
b: 1,
count: Cell::new(0),
},
MyStruct {
a: 5,
b: 2,
count: Cell::new(0),
},
];
let mut count = 0;
let mut list_of_containers: Vec<ContainerStruct> = Vec::new();
while count < 10 {
let mut c = ContainerStruct {
x: 1,
v: Vec::new(),
};

for i in list_of_items.iter() {
i.count.set(count);
if i.filter() {
c.v.push(i);
}
}
count += 1;
list_of_containers.push(c)
}
}

关于vector - 对于每个结构都包含结构数组子集的结构向量,正确的模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com