Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

벡터

벡터는 크기 조절이 가능한 배열입니다. 슬라이스와 마찬가지로 크기를 컴파일 타임에 알 수 없지만, 언제든지 늘리거나 줄일 수 있습니다. 벡터는 3개의 파라미터로 표현됩니다:

  • 데이터에 대한 포인터
  • 길이
  • 용량

용량은 벡터를 위해 예약된 메모리 양을 나타냅니다. 벡터는 길이가 용량보다 작은 동안에는 계속 늘어날 수 있습니다. 이 임계값을 넘어야 할 때, 벡터는 더 큰 용량으로 재할당됩니다.

fn main() {
    // 이터레이터는 벡터로 수집(collect)될 수 있습니다
    let collected_iterator: Vec<i32> = (0..10).collect();
    println!("(0..10)을 다음으로 수집함: {:?}", collected_iterator);

    // `vec!` 매크로는 벡터를 초기화하는 데 사용될 수 있습니다
    let mut xs = vec![1i32, 2, 3];
    println!("초기 벡터: {:?}", xs);

    // 벡터 끝에 새로운 요소를 삽입합니다
    println!("벡터에 4를 푸시합니다");
    xs.push(4);
    println!("벡터: {:?}", xs);

    // 에러! 불변 벡터는 늘어날 수 없습니다
    collected_iterator.push(0);
    // FIXME ^ 이 줄을 주석 처리하세요

    // `len` 메서드는 현재 벡터에 저장된 요소의 개수를 반환합니다
    println!("벡터 길이: {}", xs.len());

    // 인덱싱은 대괄호를 사용하여 수행됩니다 (인덱싱은 0부터 시작합니다)
    println!("두 번째 요소: {}", xs[1]);

    // `pop`은 벡터에서 마지막 요소를 제거하고 이를 반환합니다
    println!("마지막 요소 팝: {:?}", xs.pop());

    // 범위를 벗어난 인덱싱은 패닉을 일으킵니다
    println!("네 번째 요소: {}", xs[3]);
    // FIXME ^ 이 줄을 주석 처리하세요

    // 벡터는 쉽게 순회(iterate)될 수 있습니다
    println!("xs의 내용:");
    for x in xs.iter() {
        println!("> {}", x);
    }

    // 벡터는 반복 횟수가 별도의 변수(`i`)에 열거되면서 순회될 수도 있습니다
    for (i, x) in xs.iter().enumerate() {
        println!("{} 위치에 {} 값이 있습니다", i, x);
    }

    // `iter_mut` 덕분에 가변 벡터도 각 값을 수정할 수 있는 방식으로
    // 순회될 수 있습니다
    for x in xs.iter_mut() {
        *x *= 3;
    }
    println!("업데이트된 벡터: {:?}", xs);
}

더 많은 Vec 메서드는 std::vec 모듈에서 찾을 수 있습니다