0001 template <typename T> struct ComplHeap : public PQ<T>, public Vector<T> { //完全二叉堆 0002 ComplHeap(T* A, Rank n) : Vector(A, 0, n) //批量构造 0003 { heapify(_elem, n); } //作为向量的友元类,完全二叉堆可以直接访问_elem等内部数据 0004 void insert(T); T delMax(); T& getMax() { return _elem[0]; } //PQ的三个基本接口 0005 }; //ComplHeap 0006 auto PARENT = [](auto i) { return (i - 1) >> 1; }; //[i]的父节点(可能越界) 0007 auto LC = [](auto i) { return 1 + (i << 1); }; //[i]的左孩子(可能越界) 0008 auto RC = [](auto i) { return (1 + i) << 1; }; //[i]的右孩子(可能越界)