我想改变容器中的元素。我唯一关心的是容器的长度和容器的元素是有序的事实(即有第一个元素,第二个元素等)。但我很难做到这一点。
我的第一次尝试是使用Iterator
可变引用:
fn mutate<'a, A, I>(items: I) where I: Iterator<&'a mut A>
问题是我需要在元素上多次迭代。但是为了避免别名可变引用,像Slice
的{{1}}这样的结构不会实现IterMut
或Clone
。据我所知,我不能使用相同的迭代器来多次迭代可变引用。
然后我看了RandomAccessIterator
特质。这似乎是我想要的,但我找不到另一个指定容器长度的特性。实现IndexMut
的{{1}}结构确实限制了每次访问的检查,这是不可取的。
那么有办法做我想要的吗?使用Slice
会很好,因为我真正想做的是多次遍历可变元素。
答案 0 :(得分:1)
您可以要求更多界限:
fn mutate<'a, A, I>(items: I)
where I: Iterator<Item=&'a mut A>,
I: ExactSizeIterator,
I: RandomAccessIterator,
I: Clone {