当函数修改堆栈时如何将堆栈传递给函数?

时间:2015-10-05 12:30:08

标签: c++ stl

以下是限制因素:

  1. 只有STL必须用于创建堆栈(不要使用struct来创建堆栈)
  2. 不使用任何循环对堆栈进行排序
  3. 我已经找到了约束为2的解决方案。但是当我使用STL创建一个满足约束条件1的堆栈时,堆栈没有被排序,输出与输入相同。

    预期产出:5 4 3 2 1 我的输出:1 2 4 3 5

    以下是代码:

    #include<iostream>
    #include<stack>
    using namespace std;
    
    void SortedInsert(stack<int> S,int x)
    {
        if(S.empty() || x > S.top())
            S.push(x);
        else
        {
            int temp = S.top();
            S.pop();
            SortedInsert(S,x);
            S.push(temp);
        }
    
    }
    
    
    void StackSort(stack<int> S)
    {
        if(!S.empty())
        {   
            int x = S.top();
            S.pop();        
            StackSort(S);
            SortedInsert(S,x);
        }
    }
    
    void main()
    {
        int arr[5] = {1,2,4,3,5};
    
        stack<int> S;
    
        for(int i=4 ; i>=0 ; i--)
            S.push(arr[i]);
    
        StackSort(S);
    
        while(!S.empty())
        {
            cout<<S.top()<<" ";
            S.pop();
        }
    
        cin.get();
    }
    

2 个答案:

答案 0 :(得分:2)

通过引用或作为指针传递堆栈。

&#34;参考&#34;的示例:

void StackSort(stack<int> &S)
{
    if(!S.empty())
    {   
        int x = S.top();
        S.pop();        
        StackSort(S);
        SortedInsert(S,x);
    }
}

这样称呼:StackSort(S);

&#34;指针&#34;的示例:

void StackSort(stack<int> *S)
{
    if(!S->empty())
    {   
        int x = S->top();
        S->pop();        
        StackSort(S);
        SortedInsert(S,x);
    }
}

这样称呼:StackSort(&S);

您需要相应地更改SortedInsert

答案 1 :(得分:2)

通过引用或指针传递堆栈。您目前只修改本地副本。

void StackSort(stack<int> &S)

void StackSort(stack<int> *S)