在C++中进行向量推回操作的类型转换

use*_*748 1 c++ types casting vector push-back

我有两个向量

std::vector<std::string> outputStack, operatorStack;
Run Code Online (Sandbox Code Playgroud)

在某些时候,我需要从一个堆栈中弹出一些元素并将其推入另一个堆栈.

while(operatorStack.back().compare(L_BRACKET)) {
    outputStack.push_back(operatorStack.pop_back());
}
Run Code Online (Sandbox Code Playgroud)

但是,eclipse会抛出一个错误,无效的参数.但是当我输入输入时工作正常.

outputStack.push_back((std::string)operatorStack.pop_back());
Run Code Online (Sandbox Code Playgroud)

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

jua*_*nza 7

std::vector::pop_back()回报void.你需要得到第back()一个,然后弹出它.

outputStack.push_back(operatorStack.back());
operatorStack.pop_back();
Run Code Online (Sandbox Code Playgroud)

pop出于例外安全原因,这在标准库容器功能中非常常见.返回pop的value_type通常意味着可以抛出的复制结构,这意味着容器将丢失一个未被调用者成功复制的元素.所以pop()和/ back()front()操作是分开的.

  • +1用于解释为什么`pop()`和`back()`是分开的. (3认同)