用户输入作为堆栈中的参数

User input as argument in stack

我想做的是使用函数将用户输入推送到堆栈,因为我有一个切换案例菜单,每个案例都有它自己的功能(打印堆栈,添加到堆栈..)打印堆栈有效,用户输入也有效,但似乎没有任何内容被添加到堆栈中。 我将向您展示我到目前为止尝试过的东西:

void addStack(stack <int> myStack, int number){
    myStack.push(number);
}

主要功能:

    int nm;
    stack <int> st;

    do{
        menu();
        cin >> selection;
        switch(selection){
            case 2:
                cin >> nm;
                addStack(st,nm);
                break;
            case 3:
                printStack(st);
                break;

我最初尝试的是将所有内容都放入函数本身:

void addStack(stack <int> myStack){
    int number;
    cin >> number;
    myStack.push(number);
}

但我得到了相同的结果。

在这样的原型中:

void addStack(stack<int> myStack)

更改是在本地进行的,一旦函数结束,所有内容都会被丢弃。出于这个原因,您可能想要使用引用运算符——这样您就可以更改 actual 值(作为参数传递)。

你可以这样做:

void addStack(stack<int>& myStack)

您正在通过 callByValue 将 st 传递给 addStack(),这意味着方法 addSTack() 有它自己的堆栈副本,并且您在该方法中所做的任何更改都不会反映回来在 main() 方法中 .

解决方案:

  1. 使 stack <int> st 全局化,即在任何方法之外声明它,然后您就不需要将它传递给每个方法

  2. 通过引用调用传递 st,这将使 addStack() 方法中所做的更改反映在调用方法中(即 main())