std :: stack이 기본적으로 std :: deque를 사용하는 이유는 무엇입니까?
스택에서 컨테이너를 사용하는 데 필요한 유일한 작업은 다음과 가능합니다.
- 뒤 ()
- push_back ()
- pop_back ()
기본 컨테이너가 벡터 대신 데크 인 이유는 무엇입니까?
deque 재 할당은 push_front ()가 쉬운 작업이 충분한 front () 전에 요소의 버퍼를 제공하지 보장하지 않습니까? 많은 요소는 스택 스택에서 절대 사용하지 않는 것이 없습니까?
벡터 대신 이런 방식으로 deque를 사용하는 데 오버 헤드가 있습니까 priority_queue의 다중도 deque가 아닌 벡터 인 이유는 무엇입니까? (priority_queue에는 front (), push_back () 및 pop_back ()이 필요합니다. 기본적으로 스택과 동일합니다.)
아래 답변을 기반으로 업데이트되었습니다.
deque가 일반적으로 구현되는 방식은 고정 크기 배열의 가변 크기 인 배열입니다. 이는 벡터 (재 할당 및 복사가 필요함)보다 빠른 성장을위한 요소를 추가하고 제거하는 스택과 같은 경우에 더 나은 선택을 할 수 있습니다.
priority_queue는 제거 및 삽입 할 때마다 pop_heap () 또는 push_heap ()을 실행해야하는 인덱싱이 많이 필요합니다. 이 요소를 추가하는 것이 어쨌든 일정하게 상각되기 때문에 벡터가 더 나은 선택이 될 수 있습니다.
컨테이너가 커짐에 따라 벡터를 재 할당해야하는 모든 요소를 새 메모리 블록에 복사해야합니다. deque를 늘리면 새 블록이 할당되고이를 블록 목록에 연결하여 필요하지 않습니다.
물론 원하는 경우 다른 백업 컨테이너를 사용 가능합니다. 따라서 스택이 많이 증가하지 않을 경우 사용하는 것을 알고있는 경우, 선호하는 deque를 사용하는 지시하십시오.
와 데크의 벡터 상대적인 장점에 대해서는 허브 셔터의 금주 (54)의 전문가 를 참조하십시오 .
priority_queue와 queue 사이의 불일치는 다른 사람들이 구현 한 생각합니다.
참고 URL : https://stackoverflow.com/questions/102459/why-does-stdstack-use-stddeque-by-default
'IT' 카테고리의 다른 글
헤더 내부 앵커 또는 그 반대 -SEO와 관련하여 다른 점이? (0) | 2020.09.25 |
---|---|
Java 8의 예외 유형 추론의 독특한 기능 (0) | 2020.09.25 |
에 JavaScript 코드를 넣는 다른 방법의 차이점은 (0) | 2020.09.25 |
XIB 파일을 연 후 Xcode 6.3이 멈추거나 중단됨 (0) | 2020.09.25 |
C / C ++ 프로젝트에 Maven 사용 (0) | 2020.09.25 |