STL 원자로 작동

4092 단어 STL
먼저 전연 두 갈래 나무의 정의를 살펴보자.
만약에 두 갈래 나무의 깊이를 h로 설정하면 h층을 제외한 다른 각 층(1~h-1)의 결점은 모두 최대 개수에 달하고 h층의 모든 결점은 연속적으로 맨 왼쪽에 집중된다. 이것이 바로 전연 두 갈래 나무이다.1차원 수조를 전연 두 갈래 나무책으로 보는 것은 무더기다.
쌓다의 효율이 매우 높다.자주 사용하는 정렬 알고리즘, Dijkstra 알고리즘, Prim 알고리즘 등은 모두 재능을 쌓아 최적화해야 한다. 하마터면 매번 시험할 뻔한 두 갈래 정렬 트리의 효율도 밸런싱성을 빌려 높여야 하고 균형성은 전연 두 갈래 나무를 바탕으로 한다.
STL에서 더미와 관련된 4가지 함수 - 더미 만들기 make_heap(), 더미에 데이터 push_ 추가heap().더미에서 데이터 삭제pop_heap() 및 무더기 정렬 sort_heap():
헤더 파일#include
다음의_First와_마지막으로 랜덤으로 액세스할 수 있는 교체기(포인터)입니다._Comp는 비교 함수(모방 함수)이며, 그 규칙은 함수의 첫 번째 매개 변수가 두 번째 매개 변수보다 작다면true를 되돌려야 하고, 그렇지 않으면false를 되돌려야 한다고 가정합니다.
쌓다
make_heap(_First, _Last, _Comp)
기본값은 최대 더미입니다.int 형식에 대해 세 번째 매개 변수가greater()에 전송되어 최소 더미을 얻을 수 있습니다.
 
더미에 데이터를 넣다
push_heap (_First, _Last)
용기에 데이터를 추가하고push_heap ()
 
더미에서 데이터 삭제
pop_heap(_First, _Last)
팝을 먼저 호출해야 돼요_heap () 용기에서 데이터 삭제
 
무더기 정렬
sort_heap(_First, _Last)
정렬 후에는 더 이상 합법적인 힙이 아니다
#include <cstdio>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
void PrintfVectorInt(vector<int> &vet)
{
	for (vector<int>::iterator pos = vet.begin(); pos != vet.end(); pos++)
		printf("%d ", *pos);
	putchar('
'); } int main() { const int MAXN = 20; int a[MAXN]; int i; for (i = 0; i < MAXN; ++i) a[i] = rand() % (MAXN * 2); // vector vector vector<int> *pvet = new vector<int>(40); pvet->assign(a, a + MAXN); // make_heap(pvet->begin(), pvet->end()); PrintfVectorInt(*pvet); // 。 push_heap() pvet->push_back(25); push_heap(pvet->begin(), pvet->end()); PrintfVectorInt(*pvet); // pop_heap(), pop_heap(pvet->begin(), pvet->end()); pvet->pop_back(); pop_heap(pvet->begin(), pvet->end()); pvet->pop_back(); PrintfVectorInt(*pvet); // sort_heap(pvet->begin(), pvet->end()); PrintfVectorInt(*pvet); delete pvet; return 0; }

판권 성명: 본고의 블로그 오리지널 글, 블로그는 동의 없이 전재할 수 없습니다.

좋은 웹페이지 즐겨찾기