我有两个 vector
std::vector<std::string> outputStack, operatorStack;
在某些时候,我需要从一个堆栈中弹出一些元素并将其插入另一个堆栈。
while(operatorStack.back().compare(L_BRACKET)) {
outputStack.push_back(operatorStack.pop_back());
}
但是,eclipse 会抛出一个错误,参数无效。但是当我输入 cast 输入时工作正常。
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()
操作是分开的。
关于c++ - C++ 中 vector push_back 操作的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865137/