#include <algorithm> template<class RandomAccessIterator> bool is_heap(RandomAccessIterator first, RandomAccessIterator last); template<class RandomAccessIterator, class Compare> bool is_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
#include <stdio.h> #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { // 初期設定 vector<int> v1 {5, 10, 3, 4}; bool b = is_heap(v1.begin(), v1.end()); printf("初期状態 v1:"); for (auto x : v1) printf(" %d", x); cout << boolalpha << " ヒープ化? : " << b << endl; // v1 をヒープ化(make_heap) printf("v1 をヒープ化(make_heap)\n"); make_heap(v1.begin(), v1.end()); b = is_heap(v1.begin(), v1.end()); printf(" make_heap v1:"); for (auto x : v1) printf(" %d", x); cout << " ヒープ化? : " << b << endl; // 要素を追加してヒープ化 printf("要素を追加してヒープ化(push_heap)\n"); v1.push_back(7); b = is_heap(v1.begin(), v1.end()); printf(" 7 を追加(push_back) v1:"); for (auto x : v1) printf(" %d", x); cout << " ヒープ化?(全体) : " << b << endl; b = is_heap(v1.begin(), v1.end()-1); cout << " ヒープ化?(最初の 4 個) : " << b << endl; vector<int>::iterator it = is_heap_until(v1.begin(), v1.end()); printf(" ヒープ化されていない要素 : %d\n", *it); push_heap(v1.begin(), v1.end()); b = is_heap(v1.begin(), v1.end()); printf(" 7 を追加(push_heap) v1:"); for (auto x : v1) printf(" %d", x); cout << " ヒープ化?(全体) : " << b << endl; // 先頭と末尾を入れ替えてヒープ化(pop_heap) printf("先頭と末尾を入れ替えてヒープ化(pop_heap)\n"); pop_heap(v1.begin(), v1.end()); printf(" 先頭と末尾を入れ替えてヒープ化(pop_heap) v1:"); for (auto x : v1) printf(" %d", x); b = is_heap(v1.begin(), v1.end()); cout << " ヒープ化?(全体) : " << b << endl; b = is_heap(v1.begin(), v1.end()-1); cout << " ヒープ化?(最初の 4 個) : " << b << endl; v1.pop_back(); printf(" 最後の要素を削除(pop_back) v1:"); for (auto x : v1) printf(" %d", x); b = is_heap(v1.begin(), v1.end()); cout << " ヒープ化?(全体) : " << b << endl; // ヒープ化した範囲を並べ替える(sort) printf("ヒープ化した範囲を並べ替える(sort_heap)\n"); sort_heap(v1.begin(), v1.end()); printf(" sort_heap v1:"); for (auto x : v1) printf(" %d", x); b = is_heap(v1.begin(), v1.end()); cout << " ヒープ化?(全体) : " << b << endl; return 0; }
初期状態 v1: 5 10 3 4 ヒープ化? : false v1 をヒープ化(make_heap) make_heap v1: 10 5 3 4 ヒープ化? : true 要素を追加してヒープ化(push_heap) 7 を追加(push_back) v1: 10 5 3 4 7 ヒープ化?(全体) : false ヒープ化?(最初の 4 個) : true ヒープ化されていない要素 : 7 7 を追加(push_heap) v1: 10 7 3 4 5 ヒープ化?(全体) : true 先頭と末尾を入れ替えてヒープ化(pop_heap) 先頭と末尾を入れ替えてヒープ化(pop_heap) v1: 7 5 3 4 10 ヒープ化?(全体) : false ヒープ化?(最初の 4 個) : true 最後の要素を削除(pop_back) v1: 7 5 3 4 ヒープ化?(全体) : true ヒープ化した範囲を並べ替える(sort_heap) sort_heap v1: 3 4 5 7 ヒープ化?(全体) : false
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |