2013-10-21 74 views
0

我目前已经创建了一个小程序来了解列表。我允许用户将随机整数添加到列表中。它只需使用DList.insert(number, position)即可添加它们。对于第一次迭代,一切正常,但是当我允许用户输入更多随机数时,它将摆脱先前的数字,然后添加更多的随机数。因为我是新手(很少用它编程)到C++,所以我在想我犯了一个非常简单的错误。这个问题似乎是我只是覆盖列表中的旧值而不是添加新值。为什么我的列表值被覆盖?

下面是我在做什么,

List testList; 
//Ask user for a number of elements to add 
int num = get_number(); 
addRandInts(testList, num); 
//I then give the user the option to add more or quit 

这里是我的addRandInts

void addRandInts(List dl, int num) 
{ 
    int random_max = 999; 
    int numIterations = dl.getSize() + num; 

    if(num > 0) { 
     cout << "Array Size: " << dl.getSize() << endl; 
     for(int i = dl.getSize(); i < numIterations; i++) { 
      dl.insert(rand() % random_max + 1, i); 
     } 
    } else { 
     cout << "You need to enter a positive integer" << endl; 
    } 
    dl.display(cout); 
} 

我可以提供我List.insert(List, pos)方法如果需要的话。

下面是示例输出:

Please enter an integer number for the list: 5 
Current Size: 0 
42 486 341 527 189 

//chance to add more to list 
Please enter an integer number for the list: 3 
Current Size: 0 
740 490 388 

所以在第二轮我在想,我应该有5大小并应加入3到它。 因为我是新手指针之类的,我应该传递一个指针而不是列表的指针?

+0

在您的列表实现中显然存在一个错误,为什么会发布除列表中的代码之外的所有内容? – DanielKO

+0

@DanielKO我觉得我的错误来自发布的代码。我不是100%正面的,这就是为什么我提到如果需要/请求我会发布我的'insert()'代码。我相信杰里米是正确的,因为我正在传递我的价值而不是参考。 – StartingGroovy

+0

即使您要传递副本,插入副本也不应修改原始副本,因此您的副本构造函数中也存在问题;最有可能的是该副本的破坏者搞乱了原来的。为什么代码说“数组大小”,输出显示“当前大小”?另外,要插入的循环看起来不正确,你应该从0循环到'num'; 'insert'中的'pos'参数应该是什么意思? List.insert(List,pos)是什么意思?你插入一个列表到另一个? – DanielKO

回答

3

您正在通过值将列表传递给addRantInts()函数,这意味着函数正在修改列表的副本而不是原始副本。为了避免这种情况,请通过引用来代替:

void addRandInts(List & dl, int num) // <-- note ampersand! 
+0

Java习惯很难死;)感谢您指出这一点。我相信我的addRandInts()函数中也有一个逻辑错误(int for循环)。它似乎是保持添加的第一个值,但不添加额外的。 – StartingGroovy