局部变量的值为0通过引用传递

时间:2013-10-12 23:42:44

标签: c++

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

0 个答案:

没有答案