Я хотел бы мутировать элементы в контейнере. Единственное, о чем я забочусь, это длина контейнера и тот факт, что элементы контейнера упорядочены (т. Е. Есть первый элемент, второй элемент и т. Д.). Но я изо всех сил пытаюсь это сделать.Существует ли общий способ доступа к контейнеру с изменяемыми элементами?
Моя первая попытка была использовать Iterator
изменяемых ссылок:
fn mutate<'a, A, I>(items: I) where I: Iterator<&'a mut A>
Проблема заключается в том, что мне нужно повторять несколько раз над элементами. Но чтобы избежать сглаживания изменяемых ссылок, такие структуры, как Slice
, IterMut
, не реализуют Clone
или RandomAccessIterator
. Насколько я знаю, я не могу использовать один и тот же итератор для повторного обращения к изменяемым ссылкам более одного раза.
Итак, я посмотрел на черту IndexMut
. Кажется, это то, что я хочу, но я не могу найти другую черту, указывающую длину контейнера. И структура Slice
, которая реализует IndexMut
, действительно проверяет каждый доступ, что нежелательно.
Так есть способ сделать то, что я хочу? Было бы неплохо использовать Iterator
s, так как я действительно хочу, чтобы несколько раз перебирать изменяемые элементы.
Как родовое вам это нужно быть? У вас есть образец типов, которые вам нужно поддерживать? – Shepmaster
Я хотел бы поддерживать как можно больше типов, но в основном я ищу поддержку срезов и круговых буферов (RingBuf). – awelkie