본문 바로가기

Rust

[Rust] 벡터 (Vector)

반응형

Vector

Vector는 컬렉션 타입이며 메모리에서 모든 값을 근처에 있는 단일 데이터 구조에 둘 이상의 값을 저장할 수 있습니다. 또, 벡터는 같은 유형의 값만 저장할 수 있습니다. 벡터는 컴파일 타임에 사이즈를 정할 필요는 없고, 동작중에 늘어나거나 줄어들 수 있습니다. 벡터는 scope밖으로 벗어날 경우 해제 됩니다

벡터 생성

벡터를 생성하려면 Vec::new() 함수 또는 vec! 매크로로 생성을 합니다.

초기 값으로 벡터를 생성하면 Rust는 값의 타입을 유추합니다.

let v: Vec<i32> = Vec::new();
let v = vec![1, 2, 3];

Element 추가

push() 메소드를 사용하면 벡터에 element를 넣을 수 있습니다.

let mut v = Vec::new();
v.push(1);
v.push(2);
v.push(3);

Element 삭제

pop() 메소드를 사용하면 벡터에서 마지막 element를 지울 수 있습니다.

let mut v = vec![1, 2, 3];
let elem = v.pop();
println!("{elem:?}"); // Some(3)

Element 얻기(get)

벡터에서 저장된 값을 참조하는 방법에는 두가지가 있습니다. 하나는 참조자(&) 또는 대괄호([])를 이용한 인덱싱이고 하나는 get() 메소드를 이용한 방법입니다. 인덱스를 벗어나는 경우 panic될 수 있습니다

let v = vec![1, 2, 3];
let v0 = &v[0];
let v1 = v.get(1);
println!("{v0}, {v1:?}"); // 1, Some(2)

get의 경우는 Option<&T>를 반환하고 인덱스를 벗어나는 경우 None이 반환됩니다.

Iterate Element

벡터는 루프에서 모든 element를 이터레이트 될수 있습니다

let v = vec![1, 2, 3];
for i in &v {
    println!("{i}");
}

 

반응형

'Rust' 카테고리의 다른 글

[Rust] 제어문 If-else, while, do-while  (0) 2022.10.18
[Rust] string과 str의 차이점은?  (0) 2022.10.11
[Rust] 타입 추론 (Type Inference)  (0) 2022.09.16
Rust, If 문 및 loop문, control flow (제어문)  (0) 2020.01.27
Rust, 튜플  (0) 2020.01.20