[Rust/러스트] 벡터 다루기

2022. 2. 21. 10:46Programming Language/Rust

반응형

■ 벡터

벡터는 데이터량이 컴파일 타임에 결정되지 않아도 되며, 프로그램 실행 시 늘어나거나 줄어들 수 있기 때문에 힙에 저장됩니다. 또한 메모리 상에 서로 이웃하도록 모든 값을 단일 데이터 구조 안에 하나 이상의 값을 저장하도록 해줍니다. 벡터는 같은 타입의 값만을 저장할 수 있으며, 벡터는 스코프 밖으로 벗어날 시 해제됩니다.


◆ 벡터 생성

벡터를 생성하는 방법은 두 가지입니다.

 

첫번째, 제네릭을 통한 데이터 타입 설정과 Vec 구조체의 new 함수를 통한 벡터 생성 

 

두번째, vec! 매크로를 통한 벡터 생성

fn main(){
    // new 함수를 활용하여 벡터 생성
    let v1 : Vec<u32> = Vec::new();

    // vec! 매크로를 활용하여 벡터 생성
    let v2 : Vec<u32> = vec![1,2,3,4,5];
}

◆ 벡터 요소 읽기

벡터 내의 요소를 읽기 위한 방법은 두 가지입니다.

 

첫번째, 참조자(&) 또는 대괄호([])와 인덱스를 활요한 (인덱스를 벗어날 경우 프로그램이 panic 상태가 될 수 있으니 주의가 필요합니다.)

 

두번째, get 함수에 인덱스 파라미터를 넘김으로써 요소에 접근하며, 반환값으로 Option<&T>를 얻습니다.(인덱스를 벗어날 경우 None이 반환됩니다.)

fn main(){
    let v = vec![10, 20, 30];
    println!("첫번째 요소 : {}", &v[0]);
    println!("두번째 요소 : {:?}", v.get(1));
}

▶ 출력 결과

첫번째 요소 : 10
두번째 요소 : Some(20)

◆ 벡터 요소 추가

벡터를 생성하고 push 함수를 활용하여 요소를 추가합니다.

fn main(){
    // new 함수를 활용하여 벡터 생성
    let mut v1 : Vec<u32> = Vec::new();

    // push 함수를 통해 데이터 추가
    v1.push(1);
    v1.push(2);
    v1.push(3);

    println!("Vec : {:?}", v1);
}

▶ 출력 결과

Vec : [1, 2, 3]

◆ 벡터 요소 수정

벡터의 요소를 수정하기 위해서는 선언 및 초기화시 mut 접두어를 붙여줍니다. 벡터 내의 요소를 수정하는 방법은 두가지입니다.

 

첫번째, 대괄호([])와 인덱스를 활용한 수정

fn main(){
    let mut v = vec![10,20,30];

    println!("첫번째 요소 수정 전 : {}", v[0]);
    
    // 첫번째 요소 수정
    v[0] = 11;

    println!("첫번째 요소 수정 후 : {}", v[0]);
}

▶ 출력 결과

첫번째 요소 수정 전 : 10
첫번째 요소 수정 후 : 11

두번째, 참조(&)와 역참조(*)를 활용한 수정

fn main(){
    let mut v = vec![10,20,30];
    println!("수정 전 : {:?}", v);
    
    // 전체 요소 수정
    for i in &mut v{
        *i += 100;
    }
    println!("수정 후 : {:?}", v);
}

▶ 출력 결과

수정 전 : [10, 20, 30]
수정 후 : [110, 120, 130]
반응형