into_iter() vs iter_mut()into_iter()는 소유권을 넘기면서 이터레이터를 반환합니다. 즉, 원본 컬렉션의 소유권이 이터레이터로 이동하므로, 이후에 원본 컬렉션을 사용할 수 없습니다.iter_mut()는 가변 참조를 이용하여, 컬렉션을 수정할 수 있는 이터레이터를 반환합니다. 소유권을 이동시키지 않고, 원본 컬렉션에 대한 참조를 통해 요소를 수정할 수 있습니다.into_iter()into_iter()는 소유권을 이동시키는 방식입니다. 따라서 이 메서드를 호출한 후에는 해당 컬렉션을 더 이상 사용할 수 없습니다.
fn main() {
let v = vec![1, 2, 3];
// 소유권을 넘김
for num in v.into_iter() {
println!("{}", num); // 1 2 3
}
// println!("{:?}", v); // ❌ 에러! (소유권이 이동했음)
}
into_iter()는 컬렉션의 소유권을 넘기고, 컬렉션을 소비합니다. 즉, 이후 원본 벡터 v는 사용할 수 없습니다.iter_mut()iter_mut()는 가변 참조를 통해 원본 컬렉션을 수정할 수 있는 이터레이터를 반환합니다. 소유권을 넘기지 않으므로, 원본 컬렉션을 계속 사용할 수 있습니다.
fn main() {
let mut v = vec![1, 2, 3];
// 가변 참조를 사용하여 요소를 수정
for num in v.iter_mut() {
*num *= 2; // 요소를 직접 수정
}
println!("{:?}", v); // [2, 4, 6]
}
iter_mut()는 컬렉션의 요소를 가변 참조로 수정하지만, 소유권을 이동시키지 않음. 따라서 수정된 후에도 원본 컬렉션을 계속 사용할 수 있습니다.into_iter(): 소유권을 이동시키고, 이후에 원본 컬렉션을 사용할 수 없음.vec.into_iter()iter_mut(): 가변 참조를 이용해 컬렉션을 수정할 수 있으며, 소유권은 이동하지 않음.vec.iter_mut()into_iter()는 소유권을 넘기며 값을 순회하고, iter_mut()는 가변 참조를 이용하여 원본 컬렉션을 수정하지만 소유권은 이동시키지 않습니다.