1、stack容器
stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口
栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为
栈中进入数据称为 — 入栈 push
栈中弹出数据称为 — 出栈 pop
- 入栈 — push
- 出栈 — pop
- 返回栈顶 — top
- 判断栈是否为空 — empty
- 返回栈大小 — size
2、queue容器
Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口
队列容器允许从一端新增元素,从另一端移除元素
队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为
队列中进数据称为 — 入队 push
队列中出数据称为 — 出队 pop
- 入队 — push
- 出队 — pop
- 返回队头元素 — front
- 返回队尾元素 — back
- 判断队是否为空 — empty
- 返回队列大小 — size
3、示例代码
#include<iostream>
#include<string>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std;
/*注意:stack和queue 容器都不能遍历,如果遍历的话需要挪动所有元素,所以没有vector和deque灵活*/
class Person//容器中要存放的数据类型
{
public:
Person(string name,int age)
{
m_name = name;
m_age = age;
}
string m_name;
int m_age;
};
void test01()//栈stack
{
stack<Person> s1;
string name = "ABCDE";
for (int i = 0;i < 5;i++)
{
string pname="张";
pname += name[i];
Person p(pname, i+20);
s1.push(p);//入栈
}
stack<Person> s(s1);//拷贝构造
while (!s.empty())//如果栈不为空
{
cout <<"栈顶元素:" <<s.top().m_name<<":"<<s.top().m_age << endl;
cout << "栈的大小:"<< s.size() << endl;
s.pop();//出栈
}
}
void test02()//队列queue
{
queue<Person> q1;
string name = "ABCDE";
for (int i = 0;i < 5;i++)
{
string pname = "李";
pname += name[i];
Person p(pname, i + 20);
q1.push(p);//往队尾添加元素
}
queue<Person> q(q1);//拷贝构造
while (!q.empty())//如果队列不为空
{
cout << "队头元素:" << q.front().m_name << ":" << q.front().m_age << endl;
cout << "队尾元素:" << q.back().m_name << ":" << q.back().m_age << endl;
cout << "队列的大小:" << q.size() << endl;
q.pop();//从队头出元素
}
}
int main()
{
//test01();//stack
test02();//queue
return 0;
}