私のヒープは私のDynamicArray(ArrayList)に基づいており、DynamicArrayは要素の参照を取得してリストに追加/削除します。
私の問題は、fixIndexes という関数にあります。要素がヒープに追加されたときに、配列内のインデックスを修正することになっています。最後の要素がゼロであることを除いて、関数は完全に機能します。ローカル変数が配列に追加された後にスタックからポップされることに関係していると思います。
これが 0 の唯一の変数である理由と、おそらくより良いアプローチまたは解決策を知りたいと思っています。
DynamicArray シグネチャ:
bool add(T& element);
void set(uint index, T& value);
T& remove(uint index);
uint getSize();
コード:
#include <iostream>
#include "../DynamicArray/DynamicArray.h"
using namespace std;
using namespace triforce;
DynamicArray<int> array;
void fixIndexes(uint start, int& elemToSet)
{
if(start >= array.getSize())
{
cout << "Start: " << start << " elemToSet: " << elemToSet << "\n";
int temp = elemToSet;
cout << "Temp: " << temp << "\n";
array.add(temp);
}
else
{
cout << "Start: " << start << " elemToSet: " << elemToSet << "\n";
int temp = array.get(start);
array.set(start, elemToSet);
fixIndexes((start * 2) + 1, temp);
}
}
int main()
{
int val0 = 1;
int val1 = 2;
int val2 = 3;
int val3 = 4;
int val4 = 5;
int val5 = 6;
int val6 = 7;
int val7 = 8;
int val8 = 9;
int val9 = 10;
int val10 = 11;
int val11 = 12;
int val12 = 13;
int val13 = 14;
int val14 = 15;
int val15 = 2;
array.add(val0);
array.add(val1);
array.add(val2);
array.add(val3);
array.add(val4);
array.add(val5);
array.add(val6);
array.add(val7);
array.add(val8);
array.add(val9);
array.add(val10);
array.add(val11);
array.add(val12);
array.add(val13);
array.add(val14);
cout << array.toString() << "\n";
fixIndexes(1, val15);
cout << array.toString() << "\n";
return 0;
}
出力:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Start: 1 elemToSet: 2
Start: 3 elemToSet: 2
Start: 7 elemToSet: 4
Start: 15 elemToSet: 8
Temp: 8
[1, 2, 3, 2, 5, 6, 7, 4, 9, 10, 11, 12, 13, 14, 15, 0]