지금까지 필자는 std::deque
이 구현 된 방법을 배웠고 데이터가 실제로 저장되는 n 바이트 배열에 대한 포인터 배열과 같은 것을 발견했습니다. 이제 나는 deques와 관련된 몇 가지 질문을했습니다. std :: deque를 어떻게 구현합니까?
질문은 다음과 같습니다 : 그것에 대해 내 현재의 지식을 설명
그림 구조의
push_front
작업을 수행하고 데이터의 여유 공간은 블록 0이되고 있지 때 새 데이터 블록이 힙에 할당되고이 새로 할당 된 메모리에 대한 포인터가 일반 배열과 마찬가지로 'Map'배열에 삽입됩니다. O (number_of_blocks) 시간에 그렇습니까?이 동물을 어떻게 분류합니까? 더 잘 상상할 수없는 모든 데이터를 배열에 복사, 정렬 및 다시 넣어. 하지만이 방법은 O (n) 보조 메모리가 필요합니다 ...하지만!
std::sort
은std::vector
및std::deque
을 모두 분류 할 수있는 유사한 인터페이스를 제공합니다. 서로 다른 데이터 구조에 대한 서로 다른 알고리즘은 어떻게 구현됩니까? 템플릿 전문화 사용? 그렇다면 을 사용하여std::list
을 (를) 정렬 할 수없는 이유는 무엇입니까? 또는std::sort
은이 컨테이너의 내부 구조를 신경 쓰지 않고std::vector
및std::deque
(예 :operator[]
,size()
등)의 두 가지 요소에서 비슷하게 반복기 및 방법을 사용하고 있을까요? "std::sort
std::list
을 정렬 할 수없는 이유는 무엇입니까?" 분명해진다.데이터 블록의 크기는 어떻게 선택됩니까? "구현에 따라 다름"이라고 말하지만 솔루션 구현에 대한 다른 구현 및 동기에 대해 자세히 알려주십시오.
여기에 설명이 필요합니다. 감사합니다. .
'std :: deque'는 무작위 액세스 반복자를 가지고 있기 때문에 임의의 내부 정렬 알고리즘이 해당 기능을 사용하여 데이터를 정렬하고 O (N) 개의 추가 저장 공간을 필요로하지 않을 수 있습니다 . 'std :: list'는 랜덤 액세스 반복을 제공하지 않으므로'std :: sort' 가능하지 않습니다. (그러나, 그것은'std :: list :: sort' 가능하다). [std :: sort' 문서 (http://en.cppreference.com/w/cpp/algorithm/sort)의 ** 유형 요구 사항 ** 섹션을 참조하십시오. – WhozCraig
STL의 컨테이너 <- Iterator -> Algorithms 스키마가 누락되었습니다. 정렬은 임의 액세스 반복기가있는 다른 컨테이너와 동일합니다. – 101010
'std :: sort'는 ** 임의의 ** 쌍의 * 랜덤 액세스 * 반복기에서 작동합니다. 'std :: vector'와'std :: deque' 모두 랜덤 액세스 반복자를 제공하지만'std :: list'는 그렇지 않습니다. 'std :: sort'는 제공된 범위의 요소들을 교환함으로써 작동하므로 (반드시) 템플릿 전문화 마법 같은 것은 없습니다. 이것은 상당한 추가 저장 공간을 필요로하지 않으며 컨테이너/범위/반복자의 배후에있는 특별한 지식을 필요로하지 않습니다. – Mankarse