What I already have correctly done :
Code:
class token
{
    public:
    token(const token& _t){num = _t.num;opcode = _t.opcode;};
    token(std::string _in); //For parts of the input string
    token(double n){opcode='n';num=n;};//
    token(void){opcode=0;num=0;};

    char opcode;  // 'n' for operands and the first character in operators
    double num; //value for operands and no of operands for operators
    int oppr;  //for precedence 
   
    token operator+(token t){num+=t.num;return *this;};
    token operator-(token t){num-=t.num;return *this;};
    token operator*(token t){num*=t.num;return *this;};
    token operator/(token t){num/=t.num;return *this;};


};
Everything works correctly in this.

Say I want a function
Code:
std::deque<token> infix_to_rpn(std::deque<token>)
I wrote the following ...but it doesn't work and I am not able to follow what is inside the containers ...when debugging.
Code:
deque<token> infix_to_rpn(deque<token> infix)
{
    deque<token> rpn,op_s;//op_s for operator stack
    token *t,*s_t;//s_t for stack temp
    while(!infix.empty())
    {
        t = new token(infix.front());
        if(t->opcode=='n')rpn.push_back(*t);
        else if(t->opcode!='('&&t->opcode!=')'&&t->opcode!=','&&t->num==1)
        {
            op_s.push_back(*t);
        }
        else if(t->opcode == ',')
        {
            bool flag(1);
            while(flag)
            {
                s_t = new token(op_s.back());
                if(s_t->opcode=='('){flag=0;break;}
                op_s.pop_back();
                rpn.push_back(*s_t);

            }
        }
        else if(t->opcode!='('&&t->opcode!=')'&&t->opcode!=','&&t->num==2)
        {
            bool flag(1);
            while(flag)
            {
                s_t = new token(op_s.back());
                if(t->oppr>=s_t->oppr)
                {
                    op_s.pop_back();
                    rpn.push_back(*s_t);
                }
                else{flag=0;rpn.push_back(*t);break;}
            }
        }
        else if(t->opcode == '(')
        {
            rpn.push_back(*t);
        }
        else if(t->opcode == ')')
        {
            bool flag(1);
            while(flag)
            {
                s_t = new token(op_s.back());
                if(s_t->opcode!='(')
                   {
                       op_s.pop_back();
                       rpn.push_back(*s_t);
                   }
                else if (s_t->opcode == '(')
                    {
                        op_s.pop_back();
                        flag = 0;
                        break;
                    }
            }
        }
        else if(!op_s.empty())
        {
            while(!op_s.empty())
            {
                s_t = new token(op_s.back());
                op_s.pop_back();
                rpn.push_back(*s_t);
            }
        }
    }
    return rpn;
}
I am 'almost' sure that I followed the steps of the algorithm correctly ! ...though it is clear that I didn't..