0001 auto Larger = [](auto A, Rank n, Rank i) //A[i]两个孩子中的大者 0002 { return (RC(i) < n) && (A[LC(i)] < A[RC(i)]) ? RC(i) : LC(i); }; 0003 template <typename T> void siftDown(T* A, const Rank n, Rank i) { //0 <= i < _size 0004 T e = A[i]; //下滤者先备份,然后让大的后代顺次上移 0005 for (Rank j; (LC(i) < n) && (e < A[j = Larger(A, n, i)]); A[i] = A[j], i = j); 0006 A[i] = e; //下滤者最终就位 0007 } //siftDown