Deque迭代器不可解引用

Expression:Deque iterator not dereferencable

本文关键字:引用 不可解 迭代器 Deque      更新时间:2023-10-16

我正在用c++编写中缀到后缀的转换程序。这是我的代码。

#include<iostream>
#include<stack>
#include<string.h>
using namespace std;

int getPrecedence( char tmp )
{
    if(tmp=='+')
    {
        return 1;
    }
    else if(tmp == '-')
    {
        return 1;
    }
    else if(tmp == '*')
    {
        return 2;
    }
    else if(tmp == '/')
    {
        return 2;
    }
}
int main()
{
    stack<char> st;
    char expression[10];

    //cout<<"Enter expression : ";
    //cin>>expression;
    strcpy(expression,"a+b*c/d-e");
    char postfix[100];  // its postfix string
    int counter=0;
    int i=0;

    while( expression[i] != '' )  // iterate till '/0' does not come.
    {
        if(expression[i]== '+' || expression[i]== '-' || expression[i]== '*' || expression[i]== '/'  )
        {
            if( st.empty() )
            {
                st.push(expression[i]);
            }
            else // when stack not empty
            {
                int topPrecedence = getPrecedence( st.top() );
                int expressionPrecedence = getPrecedence( expression[i] );

                while( !(topPrecedence < expressionPrecedence) )
                {
                    postfix[counter++] = st.top();
                    st.pop();
                    topPrecedence = getPrecedence( st.top() );
                }
                if( st.empty() )
                {
                    st.push( expression[i] );
                }
                if( topPrecedence < expressionPrecedence )
                {
                    st.push( expression[i] );
                }

            }
        }
        else // when its an alphabet 
        {
            postfix[counter++] = expression[i];
        }

        i++;
    } // outer while ends 
    while( ! st.empty() )
    {
        postfix[counter++] = st.top();
        st.pop();
    }

    postfix[counter] = '';
    i=0;
    while( postfix[i] != '' )
    {
        cout<<postfix[i]<<" ";
        i++;
    }

    system("pause");
    return 0;
}

例如输入表达式为a+b*c/d-e。直到d,它转换表达式后缀。但是当-来了。显示如下错误:

Expression:deque iterator not dereferencable

显然它与Queue有关,我甚至没有使用过Queue。

Screen capture:https://www.facebook.com/photo.php?fbid=241461649373492&设置= a.118955391624119.1073741827.100005289761090&类型= 1

堆栈是一个容器适配器。

默认情况下,它适应deque。你可能只是从一个空的堆栈弹出