c++ - C++ 中 vector push_back 操作的类型转换

标签 c++ types vector casting push-back

我有两个 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/

相关文章:

c++ - 编译的程序找不到 freeglut.dll

c++ - 使用 ffmpeg 库将 .264 转换为 .ts

C : Function parameter with undefined type parameters

scala - 混合泛型类型

c++ - 我无法动态声明 vector 数组

matlab - matlab中如何将向量的每一行与其下一行值相除

c++ - 在 D3D12 上获取显示器的刷新率

c# - 是否可以有效地计算与数轴上的单个点 P 重叠的线段数?

haskell - 如何创建在一定范围内有界的类型

c++ - C++ 中 std::vector::operator= 的意外行为