Collections 트랙은 배운 모든 것 — 소유권, 빌림, 제네릭, trait — 이 매일 쓰는 자료구조에서 본전을 뽑는 곳이야. 제일 흔한 것부터 시작해: Vec<T>, 자라는 배열.
자라는 힙 할당 시퀀스
Vec<T> 는 한 타입 T 의 값을 몇 개든 들고, push 하면 자라. 컴파일 타임 고정 길이의 배열 [T; N] 과 달리, 벡터는 힙에 살고 런타임에 자라. Rust 에서 '뭔가의 리스트가 필요해' 의 기본 타입이야.
push, 인덱스, 순회
추가는 push, 인덱싱은 [i] (범위 초과 panic) 나 get(i) (Option 반환, panic 없음), 순회는 for x in &v. 소유권 규칙이 적용돼: &v 순회는 빌리고, &mut v 는 가변으로 빌리고, v 는 소비해. borrow checker 가 순회 중 벡터에 push 하게 안 둬 — iterator-invalidation 버그, 제거됨.
인덱스가 범위 밖일 수 있으면 [] 보다 get().
v[i] 는 i 가 너무 크면 panic; v.get(i) 는 Option<&T> 를 반환해서 빠진 경우를 안전하게 다뤄. 범위를 이미 증명했으면 인덱싱; 인덱스가 외부에서 오면 get.vec! 과 용량
vec![1, 2, 3] 매크로가 인라인으로 하나 지어. 내부적으로 Vec 은 길이랑 용량을 가져; 용량 너머로 push 하면 더 큰 버퍼로 재할당해 (amortized O(1)). 크기를 미리 알면 Vec::with_capacity(n) 이 미리 할당하고 재성장을 건너뛰어.