스택에서 컨테이너를 사용하는 데 필요한 유일한 작업은 다음과 같습니다.
- 뒤()
- push_back ()
- pop_back ()
기본 컨테이너가 벡터 대신 데크 인 이유는 무엇입니까?
deque 재 할당은 push_front ()가 효율적인 작업이되도록 front () 전에 요소의 버퍼를 제공하지 않습니까? 이러한 요소는 스택 컨텍스트에서 절대 사용되지 않으므로 낭비되지 않습니까?
벡터 대신 이런 방식으로 deque를 사용하는 데 오버 헤드가 없다면 priority_queue의 기본값도 deque가 아닌 벡터 인 이유는 무엇입니까? (priority_queue에는 front (), push_back () 및 pop_back ()이 필요합니다. 기본적으로 스택과 동일합니다.)
아래 답변을 기반으로 업데이트되었습니다.
deque가 일반적으로 구현되는 방식은 고정 크기 배열의 가변 크기 배열 인 것으로 보입니다. 이것은 벡터 (재 할당 및 복사가 필요함)보다 빠르게 성장하므로 요소를 추가하고 제거하는 스택과 같은 경우에는 deque가 더 나은 선택 일 수 있습니다.
priority_queue는 제거 및 삽입 할 때마다 pop_heap () 또는 push_heap ()를 실행해야하므로 인덱싱이 많이 필요합니다. 이것은 요소를 추가하는 것이 어쨌든 일정하게 상각되기 때문에 벡터가 더 나은 선택이 될 것입니다.