Rust 迭代向量元素的组合并操纵元素

Rust 迭代向量元素的组合并操纵元素,rust,Rust,我想得到向量元素的所有组合。我正在使用itertools的compositions()函数。这很好,但现在我想操纵向量的元素。因此,我需要一个迭代器,它生成向量元素的可变引用 我的代码基本上如下所示: let mut v: Vec<MyType> = vec![]; for vpair in v.iter_mut().combinations(2) { vpair.first().unwrap().do_something(vpair.last().unwrap()); }

我想得到向量元素的所有组合。我正在使用itertools的compositions()函数。这很好,但现在我想操纵向量的元素。因此,我需要一个迭代器,它生成向量元素的可变引用

我的代码基本上如下所示:

let mut v: Vec<MyType> = vec![];
for vpair in v.iter_mut().combinations(2) {
     vpair.first().unwrap().do_something(vpair.last().unwrap());
}
让mut v:Vec=Vec![];
用于v.iter_mut()组合中的vpair(2){
vpair.first().unwrap().do_某事(vpair.last().unwrap());
}
通过调用
do\u something()
我想在每次迭代中操作
vpair.first().unwrap()
vpair.last().unwrap()

我收到的错误是:

trait std::clone::clone未为&mut MyType实现


我能设法解决这个问题吗?还是我完全走错了方向?

不,你不能这样做。定义为

fn组合(self,k:usize)->组合
哪里
自我:大小,
Self::项:克隆,
它说底层迭代器的项需要是
Clone
。毕竟,根据定义,所有组合都多次包含每个项目。但因为它是唯一的锈

OTOH,如果您的
MyType
本身就是
Clone
,您可以尝试:

让mut v:Vec=Vec![];
用于vpair in v.in_iter()组合(2){
vpair.first().unwrap().do_某事(vpair.last().unwrap());
}
由于您拥有从
返回到\u iter
的项目,因此您可以对其执行任何操作。但每一轮循环都会操纵它们的独立克隆,这可能是你想要做的,也可能不是