我有两个 vector

std::vector<std::string> outputStack, operatorStack;

在某个时候,我需要从一个堆栈中弹出一些元素,然后将其推入另一个堆栈。
while(operatorStack.back().compare(L_BRACKET)) {
    outputStack.push_back(operatorStack.pop_back());
}

但是,eclipse会引发错误,无效的参数。但是当我键入强制输入时,效果很好。
outputStack.push_back((std::string)operatorStack.pop_back());

现在,为什么需要这种类型转换?我在读(主要在C++ Primer中),根据C++ 11需要避免类型转换。

最佳答案

std::vector::pop_back() 返回void。您需要先获取 back() ,然后将其弹出。

outputStack.push_back(operatorStack.back());
operatorStack.pop_back();

由于异常安全原因,这在标准库容器pop函数中非常常见。返回pop的value_type通常会暗示可能会引发的复制构造,这意味着容器将丢失调用者未成功复制的元素。因此pop()back()front()操作是分开的。

10-06 02:43