5.16. 벡터 (Vectors) - 100%
'vector'는 동적이고 크기가 커질 수 있는(growable) 배열이며, 표준 라이브러리 타입 <code>Vec<T></code>으로서 구현되었습니다. T
가 의미하는 바는, 어떤 타입에 대한 벡터도 만들 수 있다는 뜻입니다(더 자세한 것은 generics 챕터를 보세요). 벡터는 항상 그 데이터를 힙에 할당합니다. 벡터는 vec!
매크로를 이용해서 만들 수 있습니다:
let v = vec![1, 2, 3, 4, 5]; // v: Vec<i32>
(예전에 썼던 println!
매크로와 달리, vec!
매크로를 대괄호 []
와 함께 쓴 것에 유의합시다. Rust는 양쪽을 양쪽의 상황에 다 쓸 수 있지만, 이것은 일단 관습입니다.)
반복되는 초기화 값을 위해 vec!
에는 또다른 형태가 있습니다:
let v = vec![0; 10]; // ten zeroes
원소에 접근하기
벡터에서 특별한 인덱스 값의 위치에 있는 값을 구하기 위해서는 []
을 사용합니다:
let v = vec![1, 2, 3, 4, 5];
println!("The third element of v is {}", v[2]);
인덱스들의 카운트는 0부터 시작하며, 따라서 세번째 원소는 v[2]
가 됩니다.
반복탐색(Iterating)
일단 벡터를 만들고 나면, for
와 그 원소들을 사용하여 반복탐색(역자 주: 원문은 iterate이나, 반복자를 이용한 탐색 및 접근을 의미하기에 반복탐색으로 번역함)을 할 수 있습니다. 여기에는 세가지 버젼이 있습니다:
let mut v = vec![1, 2, 3, 4, 5];
for i in &v {
println!("A reference to {}", i);
}
for i in &mut v {
println!("A mutable reference to {}", i);
}
for i in v {
println!("Take ownership of the vector and its element {}", i);
}
벡터는 많은 유용한 메쏘드들을 가지고 있으며, 이에 대해서는 벡터 API 문서에서 읽을 수 있습니다.