더북(TheBook)

이번에는 원소의 임의 접근과 맨 앞에 원소 추가에 대해 생각해보겠습니다. 덱은 단일 메모리 청크를 사용하지 않습니다. 대신 크기가 같은 여러 개의 메모리 청크를 사용하여 데이터를 저장합니다. 이 경우, 청크의 인덱스 및 크기(또는 하나의 청크에 저장된 원소 개수)를 이용하여 특정 위치의 원소가 어느 청크에 저장되어 있는지를 알 수 있습니다. 모든 메모리 청크 주소를 연속적인 메모리 구조에 저장해놓고 사용하면 O(1)의 시간 복잡도로 원소의 임의 접근이 가능해집니다. 따라서 덱의 구조는 배열 또는 벡터와 유사하다고 가정합니다.

덱의 맨 앞에 새로운 원소를 추가할 경우, 만약 첫 번째 메모리 청크에 여유 공간이 없다면 새로운 청크를 할당하고, 이 메모리 청크 주소를 맨 첫 번째 메모리 청크 주소로 설정합니다. 이 작업을 수행하려면 청크 주소를 저장하는 메모리 공간은 새로 할당해야 하지만, 실제 원소 데이터는 전혀 이동시키지 않아도 됩니다. 메모리 재할당을 최소화하려면 첫 번째 청크부터 원소를 추가하지 않고 중간 위치의 청크부터 원소를 저장할 수 있습니다. 이러한 방식을 사용하면 일정 횟수의 push_front() 함수에 대해 메모리 재할당을 피할 수 있습니다.

Note ≡


덱은 이 장에서 논의한 다른 컨테이너만큼 단순하지는 않기 때문에 실제 구현은 좀 더 다른 형태일 수 있고, 많은 최적화 기법이 적용되었을 수 있습니다. 그러나 기본 개념은 같습니다. 즉, 이러한 컨테이너를 구현하려면 연속된 메모리 청크가 필요합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.