#tree #heap #heapsort
Вопрос:
Мне нужно создать кучу для класса дерева кучи в c . Я проверил наличие какой-либо ссылки, но во всех ссылках были переданы аргументы. Наш код выглядит так:
template lt;typename Comparablegt; vectorlt;Comparablegt; heapsort()
Мы должны создать функцию heapsort
без каких-либо аргументов. Я попытался сделать следующее:
template lt;typename Comparablegt; void heapsort(vectorlt;Comparablegt; amp;array){ for (int i = (array.size()) / 2 - 1; i gt;= 0; i--) { percolateDown(i); } for (int j = array.size() - 1; j gt; 0; j--) { int temp = array[0]; array[0] = array[j]; array[j] = temp; percolateDown(0); } }
Кроме того, для метода перколяции я получил много ссылок на метод перколяции, но у каждого из них было 3 аргумента, но у моей программы должен быть только 1 аргумент.
ниже приведен мой код для просачивания вниз:
template lt;typename Comparablegt; void BinaryHeaplt;Comparablegt;::percolateDown(int hole) { int child; Comparable tmp = std::move(array[hole]); for (; hole * 2 lt;= currentSize; hole = child) { child = hole * 2; // child: left child // child 1: right child if (child != currentSize amp;amp; array[child 1] lt; array[child]) child; if (array[child] lt; tmp) array[hole] = std::move(array[child]); else break; } array[hole] = std::move(tmp); }
Ниже приведена моя ошибка в связи с вышеизложенным:
BinaryHeap.cpp: In function 'void heapsort(std::vectorlt;Comparablegt;amp;)': BinaryHeap.cpp:143:9: error: there are no arguments to 'percolateDown' that depend on a template parameter, so a declaration of 'percolateDown' must be available [-fpermissive] 143 | percolateDown(i); | ^~~~~~~~~~~~~ ------------------------------------------------------ BinaryHeap.cpp:143:9: note: (if you use '-fpermissive', G will accept your code, but allowing the use of an undeclared name is deprecated) BinaryHeap.cpp:151:9: error: there are no arguments to 'percolateDown' that depend on a template parameter, so a declaration of 'percolateDown' must be available [-fpermissive] 151 | percolateDown(0);
Это задание по программированию; любые советы или подсказки по этому вопросу были бы полезны.
Комментарии:
1. «Я должен создать кучу для класса дерева кучи» : ваш код показывает автономную
heapsort
функцию, в то времяpercolateDown
как является методомBinaryHeap
класса. Если вам действительно нужно написать его для класса дерева кучи , тоheapsort
это должен быть метод, а не функция, иpercolateDown
его следует вызывать как метод, а не как автономную функцию.