Rust 배열에 대해서 배웠었는데, 기억하시나요? 혹시 기억이 안 나신다면 아래 링크에서 보고 오시는 것을 추천드립니다.
[Rust] 배열(array)
Rust에서 배열은 C/C++에서 보았던 배열과 비슷합니다. 하지만 매번 그랬듯이 다른 점도 있기 때문에 잘 비교하면서 알아보도록 합시다. 배열(array) Rust에서 배열은 고정된 크기의 요소를 저장하는
77monkey.tistory.com
배열에 이어서 벡터에 대해서도 알아보도록 합시다.
벡터(Vector)
Rust에서 벡터는 std::vec::Vec 모듈을 통해서 사용할 수 있는 동적 배열입니다. 그렇기 때문에 메모리를 할당하고 해제할 수 있으며 요소를 추가하거나 제거할 수 있습니다. 이를 통해서 크기를 동적으로 조절할 수 있습니다. 배열과는 다르게 힙(heap)에 할당됩니다.
벡터 생성
Rust에서 벡터를 생성하는 방법은 여러 가지가 있습니다. 먼저 정석대로 벡터를 만들면 다음과 같습니다.
Vec::new()를 통해서 빈 벡터를 만들고, push()를 통해서 요소를 하나씩 넣어줍니다. 그러면 1, 2, 3, 4, 5를 요소로 갖는 벡터가 완성됩니다.
fn main() {
let mut vector1: Vec<i32> = Vec::new();
vector1.push(1);
vector1.push(2);
vector1.push(3);
vector1.push(4);
vector1.push(5);
}
저는 vec! 매크로를 사용해서 벡터를 자주 만듭니다. 위와 같은 코드인데, 훨씬 간결하게 표현할 수 있습니다.
fn main() {
let mut vector1 = vec![1,2,3,4,5];
}
벡터를 초기화하는 방법은 배열에서 초기화를 했던 것과 동일합니다. 아래 코드는 10개의 요소를 0으로 초기화하는 것을 의미합니다. 혹시나 요소 하나씩 초기화를 하셔 힘드실까 봐 말씀드립니다.
fn main() {
let score = vec![0; 10];
}
벡터 요소 추가/변경/제거
벡터 요소를 추가하는 것은 이미 배웠지만, 복습 겸 다시 짚어보도록 하겠습니다.
벡터 요소를 추가하는 방법은 push()를 통해서 맨 뒤에 요소를 추가할 수 있지만, 특정 index에 요소를 추가할 수 있습니다.
코드를 보시면 vector 라는 벡터에 1과 3만 설정하고, push를 통해서 맨 뒤에 4를 넣고, insert()를 통해서 1 인덱스에 2를 넣는 동작을 했습니다. 결과적으로 마지막 출력에서는 1부터 4까지 순선대로 출력이 됩니다.
fn main() {
let mut vector = vec![1,3];
vector.push(4);
vector.insert(1,2);
for vec in &vector {
println!("{}", vec);
}
}
벡터 요소를 변경하는 방법은 직관적입니다. 바로 벡터의 요소를 배열처럼 접근하여 값을 변경하면 됩니다. 아직 Rust가 익숙하지 않으신 분들은 mut 넣는 것을 잊지 마시길 바랍니다.
fn main() {
let mut vector = vec![1,2,2];
vector[2] = 3;
for vec in &vector {
println!("{}", vec);
}
}
벡터 요소를 제거하는 방법은 2가지가 있습니다. 바로 pop()과 remove()입니다. pop은 맨 마지막 요소를 꺼낸다는 느낌이고, remove는 특정 인덱스의 요소를 꺼낸다는 느낌입니다. 두 개 모두 리턴값이 있는데, pop()은 Option으로 주고 remove는 T로 줍니다. 코드로 보시면 아래와 같습니다.
fn main() {
let mut vector = vec![1,2,3];
let removed1 = vector.pop();
println!("removed1: {:?}", removed1);
let removed2 = vector.remove(1);
println!("removed2: {}", removed2);
}
removed1: Some(3)
removed2: 2
아예 벡터 요소들을 다 삭제하고 싶으면, clear()를 사용하시면 됩니다. test_vec.clear()를 하시면 test_vec는 빈 벡터가 되게 됩니다. 간단하기 때문에 코드는 생략하도록 하겠습니다.
마무리
Rust 배열과 벡터에 대해서 배웠습니다. 벡터는 동적으로 크기가 변하는 점에서 배열과 다릅니다. 그렇기 때문에 좀 더 자유롭게 활용할 수 있는 이점이 있습니다. 적재적소에 배열과 벡터를 잘 활용하시길 바랍니다.
'개발 > Rust' 카테고리의 다른 글
[Rust] 포인터 타입 => 레퍼런스/박스/원시 포인터 (0) | 2023.10.09 |
---|---|
[Rust] 슬라이스 vs 슬라이스 레퍼런스 (0) | 2023.10.08 |
[Rust] 배열(array) (0) | 2023.10.02 |
[Rust] 튜플(tuple) (0) | 2023.09.28 |
[Rust] bool 타입 (0) | 2023.09.27 |