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

时间:2013-02-13 23:20:33

标签: c++ types vector casting push-back

我有两个载体

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,需要避免类型转换。

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

pop_back不返回元素。它有一个无效的回报。即使Eclipse没有抱怨,如果该演员阵容将被编译(我肯定不应该),我会感到震惊。

由于C ++中的pop_back实际上并未返回弹出元素,因此您需要先使用back抓取它。

答案 2 :(得分:1)

您需要使用std::vector::back()来获取最后一个元素的值而不是std::vector::pop_back,因为pop_back只是从后面移除元素并返回void。

还需要将std::string::comparestd::string::npos

进行比较
while(operatorStack.back().compare(L_BRACKET) == 0) {
    outputStack.push_back(operatorStack.back());
    operatorStack.pop_back();
}