2015-01-05 2 views
3

컨테이너의 요소를 변경하고 싶습니다. 내가 관심을 갖는 유일한 것은 컨테이너의 길이와 컨테이너의 요소가 정렬된다는 것입니다 (즉, 첫 번째 요소, 두 번째 요소 등이 있음). 그러나 나는 이것을하기 위해 고심하고있다.변경할 수있는 요소의 컨테이너에 액세스하는 일반적인 방법이 있습니까?

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

문제는 내가 요소를 두 번 이상 반복 할 필요가있다 : 내 첫 번째 시도

는 가변 참조의 Iterator을 사용하는 것이 었습니다. 그러나 변경 가능한 참조의 앨리어싱을 피하려면 SliceIterMut과 같은 구조체는 Clone 또는 RandomAccessIterator을 구현하지 않습니다. 그래서 내가 아는 한, 반복 가능한 참조를 두 번 이상 반복하기 위해 동일한 반복자를 사용할 수 없습니다.

그렇다면 나는 IndexMut 형질을 보았습니다. 이것은 내가 원하는 것 같다,하지만 컨테이너의 길이를 지정하는 또 다른 특성을 찾을 수 없습니다. 그리고 IndexMut을 구현하는 Slice 구조체는 각 액세스에 대한 경계 검사를 수행하지 않으므로 바람직하지 않습니다.

그래서 내가 원하는 것을 할 수있는 방법이 있습니까? Iterator을 사용하는 것이 좋을 것입니다. 왜냐하면 제가 정말로하고 싶은 것은 여러 번 반복 가능한 요소들을 반복하는 것입니다.

+0

어떻게 일반 당신은 그것을 필요합니까

fn mutate<'a, A, I>(items: I) where I: Iterator<Item=&'a mut A>, I: ExactSizeIterator, I: RandomAccessIterator, I: Clone { 
? 지원해야하는 유형의 샘플이 있습니까? – Shepmaster

+0

가능한 한 많은 유형을 지원하고 싶지만 주로 슬라이스와 순환 버퍼 (RingBuf)를 지원하려고합니다. – awelkie

답변

1

좀 더 경계를 필요로 할 수 있습니다

관련 문제