Добавление Stack.top () в вектор?

Я пытаюсь реализовать алгоритм, который принимает вектор типа Token (Token создается в другом файле .cpp) и конвертирует заданное выражение в постфиксное выражение.

static bool isOperator(const string& token){
return token == "+" || token == "-" || token == "*" || token == "/" ||
token == "%";
}
static int PrecedenceOf(const string& token){
if(token == "+" || token == "-"){return 0;}
if(token == "*" || token == "/"){return 1;}
throw runtime_error("Unkown operator:" + token);
}

double eval_infix_expr(vector<Token> ie, map<string,double> sym_tab)
{

vector<Token> postfix_expr;
stack <string> stack;

while(!ie.empty()){
for(size_t i = 0; i < ie.size(); ++i){
Token token = ie[i];
if(!(token.type  == OPERATOR)){
postfix_expr.push_back(token);
}else if(token.type == OPERATOR){
while (!stack.empty() && isOperator(stack.top()) &&
PrecedenceOf(stack.top()) >= PrecedenceOf(token.value)){
//postfix_expr.push_back(stack.top()); stack.pop();
}
stack.push(token.value);
}
}
}
Postfix_Evaluator pe(postfix_expr);
return pe.eval();

}

Закомментированная строка — единственная часть программы, которая в настоящий момент доставляет мне затруднения, мне интересно, как мне правильно взять вершину стека и вставить ее в вектор?

0

Решение

Проблема здесь в том, что stack а также vector содержат разные типы. stack содержит string, в то время как vector содержит Token, Вам нужно будет построить Token из string как в:

postfix_expr.push_back(Token(stack.top()));

Конечно, вам понадобится соответствующий конструктор, реализованный в Token,

Также не стоит называть свой stack такой же, как его тип данных. Назовите это как tokenStack чтобы избежать конфликтов в имени и типе переменной с компилятором.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]