将矢量用作堆栈的容器适配器时出错
Error using vector as container adaptor for stack
我无法在STL上使用类堆栈的容器适配器。这是代码:
typedef stack <int, vector<int> > vector_stack;
...
int main()
{
vector_stack vec;
vec.push(10);
vec.push_back(20);
vec.push_back(30);
vec.pop();
cout << vec[0] << vec[1];
...
}
它按预期通过.push(10),因为它是一个堆栈成员函数,但是.pushback作为一个向量成员函数,它不接受。错误为:
'class std::stack<int, std::vector<int> >' has no member named 'push_back'
push_back
不是std::stack
的成员,即使它是底层容器类型的成员。这就是它的定义。您必须使用push
。
如果你个人想要一个"向量堆栈",我会直接使用std::vector
,但这只是我的意见。
Stack是容器适配器,即简单地说,该类型容器的接口作为模板参数传递给它。堆栈所做的只是从接口中消除容器上的非堆栈操作,并将其常规名称赋予back()、push_back()和pop_back(
此外,默认情况下,堆栈会制作一个deque来容纳其元素,但可以使用任何提供back()、push_back()和pop_back(()的序列。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 创建包装升压适配器的自定义范围类
- 在 C++20 中将多个范围适配器连接到一个范围中
- 递归应用 C++20 范围适配器会导致编译时无限循环
- Lambda 到函数指针适配器的理解
- 返回迭代器以提升适配器转换的容器
- 将 Kleene 运算符解析为一组替代方案,适配器? 与精神 x3
- Boost Range适配器制作集合
- 升压范围适配器
- DXGI 集成适配器
- 克隆设计模式适配器 - 避免切片子项(类似于原型模式)
- 为什么不支持容器适配器中元素的初始化和迭代
- C++ 提升范围:any_range和转换适配器
- 用于隐藏结构细节的迭代器适配器
- 如何在 DirectX 11 应用程序中提供选择图形适配器的选项?
- 适配器模式:支持可以是const或非const的基础数据,优雅
- 如何对VC 17/20的分配适配器现代化
- 对象适配器的类适配器
- 将矢量用作堆栈的容器适配器时出错