원칙적으로는 STL
stack
, queue
, deque
에 인덱스 접근도 불가능하고, 중간에 위치한 자료에 대한 삽입/삭제 등의 연산도 불가능하다. only 앞이나 뒤에서만 가능하다. 즉 중간에 있는 원소에 대한 확인/변경 모두 불가능하다.
또한 vector
처럼 초기 크기 할당이 불가능하다.
❗예외 스택, 큐를 구현할 때 배열로 구현하면 가능하지만, STL
에서는 불가능하다는 것!
❗중요 하지만 STL
deque
은 굉장히 특별하다!
deque
에서는 인덱스로 원소에 접근할 수 있다.deque
에서는 초기 크기 할당도 가능하다.
임의의 인덱스 접근/변경과 초기 크기 할당이 가능하다는 점에서 vector
와 비슷해보이지만 분명한 차이가 있다.
대표적으로 deque
는 vector
와 달리 크기가 할당되지 않아도 처음부터 특정 인덱스에 접근할 수 있다.
그 이유는 vector
는 공간을 늘릴 때 배열 자체를 reallocation(재할당)
하지만, deque
은 일정 크기를 가지는 chunk(덩어리)
단위로 공간을 늘려주기 때문이다.
이에 대한 내용은 공식문서에 더 자세히 나와있다.
vector
의 경우 오른쪽 코드의 vector<int> v(5)
(5의 크기만큼 0으로 초기화)처럼 크기를 할당해주어야 임의의 원소에 접근할 수 있다.deque
은 chunk
단위로 공간을 가지고 있기 때문이다.그럼 chunk
단위니까 내가 할당한 크기 5 뒤에도 or 크기를 할당하지 않아도 공간이 할당되어 있을 수도 있겠네?
이를 실험하기 위해 이렇게 코드를 짜보자!
deque
에 크기 10을 할당해준다.👉 예상되는 결과는
예상이 맞을지 확인해보자!
👉 chunk
단위로 할당할 때 항상 0으로 할당되지는 않는다는 것을 알 수 있다!!
c++ STL
에서는 stack
, queue
와 달리 deque
에서는 임의의 인덱스 접근이 가능하고, 크기 할당 또한 가능하다. 이러한 점에서 vector
와 비슷하다.
다만 deque
이 vector
와 다른 점은 chunk
단위로 공간을 할당하기 때문에 초기 공간 할당 없이 인덱스 접근이 가능하다는 것이다. 하지만 공간이 할당될 때 그 값이 항상 0으로 초기화되는 것은 아니다.