我有两个 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()
操作是分开的。