我的堆基于我的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]