Rust 튜토리얼 목차

벡터의 반복자(Iterators)

벡터와 같은 Iterator trait가 구현된 것들에는 요소들을 반복하고 처리할 때 사용할 수 있는 여러 가지 반복자 메서드가 있습니다.

iter(), iter_mut(), into_iter()는 각각 불변 참조, 가변 참조, 소유권 이동을 수행하는 반복자를 생성합니다.

1. iter()

iter() 메서드는 벡터의 각 요소에 대한 불변 참조를 생성하는 반복자를 반환합니다.

이 반복자는 벡터의 요소를 읽기 전용으로 사용할 때 유용합니다.

let vec = vec![1, 2, 3, 4, 5];

for element in vec.iter() {
    println!("요소: {}", element);
}

2. iter_mut()

iter_mut() 메서드는 벡터의 각 요소에 대한 가변 참조를 생성하는 반복자를 반환합니다.

이 반복자는 벡터의 요소를 수정할 때 유용합니다.

let mut vec = vec![1, 2, 3, 4, 5];

for element in vec.iter_mut() {
    *element *= 2; // 각 요소에 2를 곱함
}
println!("변경된 벡터: {:?}", vec);

3. into_iter()

into_iter() 메서드는 벡터의 각 요소의 소유권을 이동하는 반복자를 반환합니다.

이 반복자는 벡터의 요소를 소유권을 이동시키며 처리할 때 유용합니다.

이를 통해 벡터의 요소를 다른 데이터 구조로 쉽게 옮길 수 있습니다.

let vec = vec!["a".to_string(), "b".to_string(), "c".to_string()];

let mut uppercased_vec: Vec<String> = Vec::new();

for element in vec.into_iter() {
    uppercased_vec.push(element.to_uppercase());
}

println!("대문자로 변경된 벡터: {:?}", uppercased_vec);

into_iter()를 사용할 때 원래의 벡터는 더 이상 사용할 수 없습니다.

소유권이 이동되어 원래 벡터에 대한 참조가 무효화되기 때문입니다.

차이점

이러한 반복자들은 각각 다양한 상황에 따라 벡터를 처리할 수 있습니다.