C++ STL容器之 stack

STL 中的 stack 是一种容器适配器,而不是一种容器。

它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为stack使用。

stack 有可能实际上是一个 vector, deque 或 list. 如果没有特殊指明,将使用 deque作为stack的实际容器。

构造函数

构造函数中包含两个模板参数。stack<stack::alue_type T, stack::container_type Container>

其中 T代表数值类型,可以是基本数据类型或用户自定义类型。

Container代表容器类型,可以是 vector, deque 或 list

1 std::stack<int> first; // empty stack
2 std::stack<int> second(mydeque); // stack initialized to copy of deque
3 std::stack<int, std::vector<int>> third; // empty stack using vector
4 std::stack<int, std::vector<int>> fourth(myVector); // stack initialized to copy of vector using vector
View Code

成员函数

empty()

 测试栈是否为空,为空返回true,否则返回false。

 bool empty() const;

size()

 返回栈中元素的个数

 size_type size() const;

top()

 返回栈顶元素(最后push进来的那个)的引用。

 referenc& top();

push(val)

 压一个值到栈中,其值将被初始化为 val

 void push(const value_type& val);

pop()

 将栈顶元素弹出,注意这个函数无返回值,如果需要获取栈顶元素,应先调用top(),再pop()

 void pop();

emplace(Args..)

 emplace 功能上与 push相同。不过emplace更高效。

 emplace 的参数不是容器元素本身,而是构造容器元素所需要的参数。即如果容器元素是一个类的对象,那么Args就是这个类构造函数的参数。

 push 是先构造一个 temporary 的元素对象,再将这个对象拷贝到容器中。而emplace是直接在容器内用参数构造一个对象。省略了拷贝的时间消耗。

 emplace 本质上是调用了各容器的 emplace_back(args...)函数

swap()

 swap将两个 stack的内容交换。这两个 stack的模板参数 T和 Container必须都相同。

 void swap(stack& x) 重载1:x.swap(y)

 void swap(stack& x, stack& y)  重载2: swap(x, y)

关系运算符

 取决于实际容器的关系运算符

posted @ 2016-09-13 09:02  彼得朱  阅读(2966)  评论(0编辑  收藏  举报