stack容器

stack 基本概念

概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口

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

栈中进入数据称为 — 入栈 push

栈中弹出数据称为 — 出栈 pop

![](https://gitee.com/peng_xiang_li/Blogimage/raw/master/C++STL /src=http—iqchen.github.io-img-stack.png&refer=http—iqchen.github.jpg)

stack 常用函数

功能描述:栈容器常用的对外接口

构造函数:

  • stack<T> stk; //stack采用模板类实现, stack对象的默认构造形式
  • stack(const stack &stk); //拷贝构造函数

赋值操作:

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

数据存取:

  • push(elem); //向栈顶添加元素
  • pop(); //从栈顶移除第一个元素
  • top(); //返回栈顶元素

大小操作:

  • empty(); //判断堆栈是否为空
  • size(); //返回栈的大小

示例:

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
#include <iostream>
#include <stack>
using namespace std;


//栈容器常用接口
void test01()
{
//创建栈容器 栈容器必须符合先进后出
stack<int> s;

//向栈中添加元素,叫做 压栈 入栈
s.push(1);
s.push(2);
s.push(3);

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

}

int main() {

test01();

system("pause");

return 0;
}
1
2
3
4
栈顶元素为: 3
栈顶元素为: 2
栈顶元素为: 1
栈的大小为:0

总结:

  • 入栈 — push
  • 出栈 — pop
  • 返回栈顶 — top
  • 判断栈是否为空 — empty
  • 返回栈大小 — size

queue 容器

queue 基本概念

概念:队列–Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口;

队列容器允许从一端新增元素,从另一端移除元素;

队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为;

队列中进数据称为 — 入队 push

队列中出数据称为 — 出队 pop

queue 常用接口

![](https://gitee.com/peng_xiang_li/Blogimage/raw/master/C++STL /2-1P913113140553.jpg)

功能描述:栈容器常用的对外接口

构造函数:

  • queue<T> que; //queue采用模板类实现,queue对象的默认构造形式
  • queue(const queue &que); //拷贝构造函数

赋值操作:

  • queue& operator=(const queue &que); //重载等号操作符

数据存取:

  • push(elem); //往队尾添加元素
  • pop(); //从队头移除第一个元素
  • back(); //返回最后一个元素
  • front(); //返回第一个元素

大小操作:

  • empty(); //判断堆栈是否为空
  • size(); //返回栈的大小

示例:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <queue>
#include <string>
using namespace std;

class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}

string m_Name;
int m_Age;
};

void test01() {

//创建队列
queue<Person> q;

//准备数据
Person p1("kevin", 20);
Person p2("A1", 10);
Person p3("B", 9);
Person p4("C", 8);

//向队列中添加元素 入队操作
q.push(p1);
q.push(p2);
q.push(p3);
q.push(p4);

//队列不提供迭代器,更不支持随机访问
while (!q.empty()) {
//输出队头元素
cout << "队头元素-- 姓名: " << q.front().m_Name
<< " 年龄: " << q.front().m_Age << endl;

cout << "队尾元素-- 姓名: " << q.back().m_Name
<< " 年龄: " << q.back().m_Age << endl;

cout << endl;
//弹出队头元素
q.pop();
}

cout << "队列大小为:" << q.size() << endl;
}

int main() {

test01();

system("pause");

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
队头元素-- 姓名: kevin 年龄: 20
队尾元素-- 姓名: C 年龄: 8

队头元素-- 姓名: A1 年龄: 10
队尾元素-- 姓名: C 年龄: 8

队头元素-- 姓名: B 年龄: 9
队尾元素-- 姓名: C 年龄: 8

队头元素-- 姓名: C 年龄: 8
队尾元素-- 姓名: C 年龄: 8

队列大小为:0

总结:

  • 入队 — push
  • 出队 — pop
  • 返回队头元素 — front
  • 返回队尾元素 — back
  • 判断队是否为空 — empty
  • 返回队列大小 — size
  • pop()虽然会移除下一个元素,但是并不返回它。front()和back()返回下一个元素但并不移除该元素。
  • stack中的函数与queue很类似,但是stack中要返回元素时,只能返回最后一个元素,且函数名不一样(stack中为s.top()),需要区分。