>source

벡터를 만들 때 길이와 용량이 동일합니다. 이 방법들의 차이점은 무엇입니까?

fn main() {
    let vec = vec![1, 2, 3, 4, 5];
    println!("Length: {}", vec.len()); // Length: 5
    println!("Capacity: {}", vec.capacity()); // Capacity: 5
}

  • 답변 # 1

    성장 가능한 벡터는 향후 추가를위한 공간을 예약하므로 할당 된 공간 (용량)과 실제로 사용 된 공간 (길이)의 차이

    이것은 Vec 의 표준 라이브러리 문서에 설명되어 있습니다. :

    와이즈 비즈 와이즈 비즈  가능할 때마다 벡터의 크기를 지정할 수 있습니다.

  • 답변 # 2

    Thecapacityof a vector is the amount of space allocated for any future elements that will be added onto the vector. This is not to be confused with thelengthof a vector, which specifies the number of actual elements within the vector. If a vector's length exceeds its capacity, its capacity will automatically be increased, but its elements will have to be reallocated.

    For example, a vector with capacity 10 and length 0 would be an empty vector with space for 10 more elements. Pushing 10 or fewer elements onto the vector will not change its capacity or cause reallocation to occur. However, if the vector's length is increased to 11, it will have to reallocate, which can be slow. For this reason, it is recommended to use  벡터의 요소 수 (예 : 벡터의 길이)를 반환합니다. 아래 예에서 Vec::with_capacity  5 개의 요소를 포함하므로 len()   vec 를 반환 .

    len()  (메모리를 재할 당하지 않고) 벡터보유 할 수있는요소 수를 반환합니다. 아래 예에서 5   capacity() 를 붙들 수있다   vec 를 사용하기 때문에 요소  원래 5 개 외에 최소 100 개의 슬롯을 할당합니다 (할당 횟수를 최소화하기 위해 더 할당 될 수 있음).

    105
    
    

    reserve()

관련 자료

  • 이전 gis - python에서 간단한 chloropleth 맵 세트 만들기 – 색상이 표시되지 않음
  • 다음 sql - mongoDB의 하위 쿼리 문제