Rust
배열, 벡터 및 조각
수색…
배열
배열은 스택에서 할당되고 정적으로 크기가 지정된 단일 유형의 객체 목록입니다.
배열은 일반적으로 대괄호 사이에 주어진 유형의 요소 목록을 묶어서 만듭니다. 배열의 유형은 특수 구문으로 표시됩니다. [T; N]
여기서 T
는 요소의 유형이고 N
은 컴파일 시간에 알려 져야합니다.
예를 들어 [4u64, 5, 6]
은 [u64; 3]
. 참고 : 5
와 6
은 u64
유형으로 추측됩니다.
예
fn main() {
// Arrays have a fixed size.
// All elements are of the same type.
let array = [1, 2, 3, 4, 5];
// Create an array of 20 elements where all elements are the same.
// The size should be a compile-time constant.
let ones = [1; 20];
// Get the length of an array.
println!("Length of ones: {}", ones.len());
// Access an element of an array.
// Indexing starts at 0.
println!("Second element of array: {}", array[1]);
// Run-time bounds-check.
// This panics with 'index out of bounds: the len is 5 but the index is 5'.
println!("Non existant element of array: {}", array[5]);
}
제한 사항
배열 (또는 조각)의 패턴 일치는 안정된 녹에서 지원되지 않습니다 ( # 23121 및 조각 패턴 참조 ).
Rust는 유형 숫자의 일반성을 지원하지 않습니다 ( RFC # 1657 참조). 따라서 모든 크기의 모든 배열에 대한 특성을 단순히 구현하는 것은 불가능합니다. 결과적으로 표준 특성은 제한된 수의 요소까지 배열에 대해 구현됩니다 (마지막 검사, 최대 32 개 포함). 요소가 더 많은 배열은 지원되지만 표준 특성을 구현하지 않습니다 ( 문서 참조).
이러한 제한 사항은 앞으로는 해제 될 것으로 기대됩니다.
벡터
벡터는 본질적으로 단일 유형의 힙 할당, 동적 크기 객체 목록에 대한 포인터입니다.
예
fn main() {
// Create a mutable empty vector
let mut vector = Vec::new();
vector.push(20);
vector.insert(0, 10); // insert at the beginning
println!("Second element of vector: {}", vector[1]); // 20
// Create a vector using the `vec!` macro
let till_five = vec![1, 2, 3, 4, 5];
// Create a vector of 20 elements where all elements are the same.
let ones = vec![1; 20];
// Get the length of a vector.
println!("Length of ones: {}", ones.len());
// Run-time bounds-check.
// This panics with 'index out of bounds: the len is 5 but the index is 5'.
println!("Non existant element of array: {}", till_five[5]);
}
조각
조각은 개체 목록에 대한보기이며 형식이 T
인 개체 조각을 나타내는 [T]
유형이 있습니다.
슬라이스는 크기 가 지정되지 않은 유형 이므로 포인터 뒤에 만 사용할 수 있습니다. (문자열 세계 유추 : 문자열 슬라이스라고도하는 str
도 크기가 조정되지 않습니다.)
배열은 조각으로 강요되고 벡터는 조각으로 역 참조 될 수 있습니다. 따라서 슬라이스 메서드를 둘 다 적용 할 수 있습니다. (String world analogy : str
은 String
이고, [T]
는 Vec<T>
이다.)
fn main() {
let vector = vec![1, 2, 3, 4, 5, 6, 7, 8];
let slice = &vector[3..6];
println!("length of slice: {}", slice.len()); // 3
println!("slice: {:?}", slice); // [4, 5, 6]
}