수색…


배열

배열은 스택에서 할당되고 정적으로 크기가 지정된 단일 유형의 객체 목록입니다.

배열은 일반적으로 대괄호 사이에 주어진 유형의 요소 목록을 묶어서 만듭니다. 배열의 유형은 특수 구문으로 표시됩니다. [T; N] 여기서 T 는 요소의 유형이고 N 은 컴파일 시간에 알려 져야합니다.

예를 들어 [4u64, 5, 6][u64; 3] . 참고 : 56u64 유형으로 추측됩니다.


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 : strString 이고, [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]
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow