Vec

Vec λŠ” νž™μ— ν• λ‹Ήλœ ν‘œμ€€ κ°€λ³€ 크기 λ²„νΌμž…λ‹ˆλ‹€:

fn main() {
    let mut v1 = Vec::new();
    v1.push(42);
    println!("v1: len = {}, μš©λŸ‰ = {}", v1.len(), v1.capacity());

    let mut v2 = Vec::with_capacity(v1.len() + 1);
    v2.extend(v1.iter());
    v2.push(9999);
    println!("v2: len = {}, μš©λŸ‰ = {}", v2.len(), v2.capacity());

    // μš”μ†Œκ°€ μžˆλŠ” 벑터λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” ν‘œμ€€ λ§€ν¬λ‘œμž…λ‹ˆλ‹€.
    let mut v3 = vec![0, 0, 1, 2, 3, 4];

    // 짝수 μš”μ†Œλ§Œ μœ μ§€ν•©λ‹ˆλ‹€.
    v3.retain(|x| x % 2 == 0);
    println!("{v3:?}");

    // 연속 쀑볡 μ‚­μ œ
    v3.dedup();
    println!("{v3:?}");
}

Vec은 Deref<Target = [T]>λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€. μ΄λŠ” Vecμ—μ„œ 슬라이슀 λ©”μ„œλ“œλ₯Ό 호좜 ν•  수 μžˆλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

This slide should take about 10 minutes.
  • Vec is a type of collection, along with String and HashMap. The data it contains is stored on the heap. This means the amount of data doesn’t need to be known at compile time. It can grow or shrink at runtime.
  • Vec<T>λŠ” μ œλ„€λ¦­ νƒ€μž…μ΄κΈ°λ„ ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ Tλ₯Ό κΌ­ 지정해쀄 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. 이 경우, 러슀트 νƒ€μž… 좔둠이 벑터에 처음 pushν•˜λŠ” λ°μ΄ν„°λ‘œ Tλ₯Ό μ•Œ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • vec![...]λŠ” Vec::new() λŒ€μ‹  μ“Έ 수 μžˆλŠ” ν‘œμ€€ λ§€ν¬λ‘œλ‘œμ„œ, 초기 데이터λ₯Ό μΆ”κ°€ν•œ 벑터λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ²‘ν„°λŠ” [ ]λ₯Ό μ‚¬μš©ν•˜μ—¬ 인덱슀둜 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ©΄ νŒ¨λ‹‰μ΄ λ°œμƒν•©λ‹ˆλ‹€. λŒ€μ‹  get을 μ‚¬μš©ν•˜λ©΄ Option을 λ°˜ν™˜ν•©λ‹ˆλ‹€. pop ν•¨μˆ˜λŠ” λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.
  • Slices are covered on day 3. For now, students only need to know that a value of type Vec gives access to all of the documented slice methods, too.