【C++容器篇之stack】

411 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

stack

概念stack 是一种先进后出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”。

特点

  • 栈中只有顶端的元素可以被外界使用,因此栈不允许有遍历行为

  • 栈中进入数据称为:入栈(push)

  • 栈中弹出元素称为:出栈(pop)

构造函数

- stack<T> stk; // stack采用模板类实现。stack对象的默认构造形式

- stack<const stack &stack> &stk; //拷贝构造函数

赋值操作

- stack &operator=(const stack &stk); // 重载符号操作符

数据存取

- push(elem); // 向栈顶添加元素

- pop(); // 从栈顶移除第一个元素

- top(); //返回栈顶元素

其他操作

- empty(); // 判断栈是否为空

- size(); // 返回栈的大小

- swap(); //交换两个容器的元素

小结

- 入栈:push()

- 出栈:pop()

- 返回栈顶元素:top()

- 判断栈是否为空:empty()

- 返回栈的大小:size()

【demo】:

#include <iostream>
#include <stack>

using namespace std;

void test01()
{
    // 创建栈容器
    stack<int> s;

    // 向栈中添加元素(压栈、入栈)
    s.push(10);
    s.push(20);
    s.push(30);

    // 若栈不为空
    while (!s.empty())
    {
        // 输出栈顶元素
        cout << "栈顶元素为:" << s.top() << endl;
        // 弹出栈顶元素(出栈)
        s.pop();
        cout << "栈的大小为:" << s.size() << endl;
        cout << "栈顶元素为:" << s.top() << endl;
    }
}

void test02()
{
    // 创建栈容器
    stack<int> s1;

    // 向栈中添加元素(压栈、入栈)
    s1.push(10);
    s1.push(20);
    s1.push(30);

    stack<int> s2;
    s2.push(100);
    s2.push(200);
    s2.push(300);

    cout << "交换前" << endl;
    cout << "size of s1 is : " << s1.size();
    cout << "size of s2 is : " << s2.size();

    s1.swap(s2);
    cout << "交换后" << endl;
    cout << "size of s1 is : " << s1.size();
    cout << "size of s2 is : " << s2.size();
}

int main()
{
    test01();
    return 0;
}