C++容器(Stack & Queue)

2

C++容器(Stack & Queue)

  容器是C++非常方便的功能,今天给小伙伴们介绍stack和queue库,一个是栈,一个是队列,在数据结构中这两个内容也是必须掌握的重点内容,在刷题时也常常使用它们,因此在一篇博客中将它们放在一起介绍。

stack容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
#include<stack>
using namespace std;

int main() {

// 创建栈的时候,只有拷贝构造和空构造方法,不能像vector一样传入一个数组。
stack<int> s;

// empty判断容器是否为空,为空则返回true,否则返回false
cout << "s是否为空:" << s.empty() << endl;
// stack对象没有capacity方法,只有size方法,和vector相同,可以获取容器中的元素个数。
cout << "s的大小为:" << s.size() << endl;

// 堆栈中最最重要的一个函数,push,这要简单介绍一下堆栈的特点,堆栈是一个先进后出的数据结构。
// 生活中类似于洗盘子,进电梯,先洗的盘子都是放在最下面,最先进电梯的人是最后出来的。
// 向堆栈中放入元素的方法之有一个,就是push,向栈顶放入元素,因此非常重要。
s.push(1);
s.push(2);
s.push(3);

cout << "s是否为空:" << s.empty() << endl;
cout << "s的大小为:" << s.size() << endl;
// top可以查看堆栈顶部的元素,因为堆栈中只能看到顶部元素,因此不可以随机访问,也不能够遍历。
// 因为3是最后入栈的,因此栈顶元素尾3
cout << "栈顶元素为:" << s.top() << endl;

// 堆栈中和push相反的操作,和push的地位相同,pop弹出栈顶元素。
s.pop();
// 因为栈顶元素3被弹出,因此现在栈顶元素为2
cout << "栈顶元素为:" << s.top() << endl;
cout << "s是否为空:" << s.empty() << endl;
cout << "s的大小为:" << s.size() << endl;

return 0;
}

1

queue容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
#include<queue>
using namespace std;

int main() {

// 创建队列的时候,和栈相同,只有拷贝构造和空构造方法。
queue<int> q;

// empty判断容器是否为空,为空则返回true,否则返回false
cout << "q是否为空:" << q.empty() << endl;
// size方法,获取容器中的元素个数。
cout << "q的大小为:" << q.size() << endl;

// 队列中最最重要的一个函数,push,这要简单介绍一下队列的特点,队列是一个先进先出的数据结构。
// 生活中类似于排队购物,先排的人可以最先获得服务。
// 向队列中放入元素的方法之有一个,就是push,向队列尾增加元素,因此非常重要。
q.push(1);
q.push(2);
q.push(3);

cout << "q是否为空:" << q.empty() << endl;
cout << "q的大小为:" << q.size() << endl;
// 和栈不同的是,栈只能获取栈顶元素,而队列可以通过front获取队头元素,也可以通过back获取队尾元素。
// 因为队列中只能看到队头和队尾元素,因此不可以随机访问,也不能够遍历。
// 因为1先入队,3最后入队,所以队列头元素为1,队列尾元素为3
cout << "队列头元素为:" << q.front() << endl;
cout << "队列尾元素为:" << q.back() << endl;

// 队列中和push相反的操作,和push的地位相同,pop弹出队列头部元素。
q.pop();
// 当弹出队列头元素时,2就变成了新的队列头元素,队列尾元素仍为3。
cout << "队列头元素为:" << q.front() << endl;
cout << "队列尾元素为:" << q.back() << endl;
cout << "q是否为空:" << q.empty() << endl;
cout << "q的大小为:" << q.size() << endl;

return 0;
}

1

C++小结

  栈和队列非常重要,相比较而言栈会更加常用一些,有一个经典的括号匹配的问题,其就是利用堆栈的思想,小伙伴可以去尝试一下呦。细心的小伙伴也可以发现vector能够看成一个堆栈,deque能够看成一个队列,而且功能也比stack和queue要强大,所以一般可以使用vector和deque完成相应的操作。

-------------本文结束感谢您的阅读-------------
0%