STL算法(Algorithms):堆(heap)
1、make_heap:使序列變成堆
原型:
template <class RandomAccessIterator>
void make_heap ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void make_heap ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
范例:
2、push_heap:壓棧(入棧)
原型:
template <class RandomAccessIterator>
void push_heap ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void push_heap ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
3、pop_heap:彈棧(出棧)
原型:
template <class RandomAccessIterator>
void pop_heap ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void pop_heap ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
范例:
原型:
template <class RandomAccessIterator>
void make_heap ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void make_heap ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
范例:
1
// range heap example
2
#include <iostream>
3
#include <algorithm>
4
#include <vector>
5
using namespace std;
6
7
int main () {
8
int myints[] = {10,20,30,5,15};
9
vector<int> v(myints,myints+5);
10
11
make_heap (v.begin(),v.end());
12
cout << "initial max heap : " << v.front() << endl;
13
14
pop_heap (v.begin(),v.end()); v.pop_back();
15
cout << "max heap after pop : " << v.front() << endl;
16
17
v.push_back(99); push_heap (v.begin(),v.end());
18
cout << "max heap after push: " << v.front() << endl;
19
20
sort_heap (v.begin(),v.end());
21
22
cout << "final sorted range :";
23
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
24
25
cout << endl;
26
27
return 0;
28
}
29

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

2、push_heap:壓棧(入棧)
原型:
template <class RandomAccessIterator>
void push_heap ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void push_heap ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
3、pop_heap:彈棧(出棧)
原型:
template <class RandomAccessIterator>
void pop_heap ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void pop_heap ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
范例:
1
// range heap example
2
#include <iostream>
3
#include <algorithm>
4
#include <vector>
5
using namespace std;
6
7
int main () {
8
int myints[] = {10,20,30,5,15};
9
vector<int> v(myints,myints+5);
10
vector<int>::iterator it;
11
12
make_heap (v.begin(),v.end());
13
cout << "initial max heap : " << v.front() << endl;
14
15
pop_heap (v.begin(),v.end()); v.pop_back();
16
cout << "max heap after pop : " << v.front() << endl;
17
18
v.push_back(99); push_heap (v.begin(),v.end());
19
cout << "max heap after push: " << v.front() << endl;
20
21
sort_heap (v.begin(),v.end());
22
23
cout << "final sorted range :";
24
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
25
26
cout << endl;
27
28
return 0;
29
}
30
4、sort_heap:對堆排序
原型:template <class RandomAccessIterator>
void sort_heap ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort_heap ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
范例:
1
// range heap example
2
#include <iostream>
3
#include <algorithm>
4
#include <vector>
5
using namespace std;
6
7
int main () {
8
int myints[] = {10,20,30,5,15};
9
vector<int> v(myints,myints+5);
10
vector<int>::iterator it;
11
12
make_heap (v.begin(),v.end());
13
cout << "initial max heap : " << v.front() << endl;
14
15
pop_heap (v.begin(),v.end()); v.pop_back();
16
cout << "max heap after pop : " << v.front() << endl;
17
18
v.push_back(99); push_heap (v.begin(),v.end());
19
cout << "max heap after push: " << v.front() << endl;
20
21
sort_heap (v.begin(),v.end());
22
23
cout << "final sorted range :";
24
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
25
26
cout << endl;
27
28
return 0;
29
}
30
注:例子來源于www.cplusplus.com網站
posted on 2012-01-12 13:53 Benjamin 閱讀(955) 評論(0) 編輯 收藏 引用 所屬分類: 泛型編程