是否有访问可变元素容器的通用方法?

时间:2015-01-05 03:20:05

标签: rust

我想改变容器中的元素。我唯一关心的是容器的长度和容器的元素是有序的事实(即有第一个元素,第二个元素等)。但我很难做到这一点。

我的第一次尝试是使用Iterator可变引用:

fn mutate<'a, A, I>(items: I) where I: Iterator<&'a mut A>

问题是我需要在元素上多次迭代。但是为了避免别名可变引用,像Slice的{​​{1}}这样的结构不会实现IterMutClone。据我所知,我不能使用相同的迭代器来多次迭代可变引用。

然后我看了RandomAccessIterator特质。这似乎是我想要的,但我找不到另一个指定容器长度的特性。实现IndexMut的{​​{1}}结构确实限制了每次访问的检查,这是不可取的。

那么有办法做我想要的吗?使用Slice会很好,因为我真正想做的是多次遍历可变元素。

1 个答案:

答案 0 :(得分:1)

您可以要求更多界限:

fn mutate<'a, A, I>(items: I) 
where I: Iterator<Item=&'a mut A>,
      I: ExactSizeIterator,
      I: RandomAccessIterator,
      I: Clone {