queue && deque
程序员文章站
2024-02-11 19:27:04
...
一、queue
queue是一种先进先出的数据类型,有头部和尾部,头部负责数据的出队,尾部负责数据的入队。不支持遍历操作
数据操作
- pop(): 从队列的头部弹出数据
- push(): 在队尾压入数据
- front(): 获取队头数据
- back(): 获取队尾数据
- size(): 返回队列里面元素个数
- empty(): 判断元素是否为空
#include <iostream>
#include <queue>
using namespace std;
void main()
{
queue<int> que;
// 压入数据
for (int i = 1; i <= 10; i++)
{
que.push(i);
}
// 弹出并打印数据
cout << "剩余元素个数||当前弹出元素" << endl;
while (!que.empty())
{
cout << que.size()<<" || "<<que.front() << endl;
que.pop();
}
}
运行结果:
二、deque
deque与queue不同,deque无论是在队尾还是队首都可以进行插入和删除操作,也可以在任意位置进行插入操作,且支持遍历。
初始化操作
- deque(int n,type elem) // 构造一个有n个elem的队列
- deque(deque::iterator beg,deque::iterator end) // 将另一个队列的某个区间够着给本身
deque<int> deq1(5,40);
deque<int> deq2(deq1.begin(),deq1.end());
赋值操作
赋值操作和构造初始化差不多
- assign(n, elem);//将n个elem拷贝赋值给本身。
- assign(deque::iterator beg,deque::iterator end);// 将另一个队列的某个区间够着给本身
- swap(deq);// 将deq与本身的元素互换
swap()函数演示:
// 打印队列
void printDeq(const deque<int> &deq)
{
for (deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++)
cout << *it << " ";
cout << endl;
}
void main()
{
deque<int> deq1,deq2;
for (int i = 0; i < 10; i++)
{
deq1.push_back(i);
deq2.push_back(i + 10);
}
cout << "交换前:" << endl;
cout << "deq1:";
printDeq(deq1);
cout << "deq2:";
printDeq(deq2);
// 交换连个队列里面的值
deq2.swap(deq1);
cout << "交换后:" << endl;
cout << "deq1:";
printDeq(deq1);
cout << "deq2:";
printDeq(deq2);
}
运行结果:
交换前:
deq1:0 1 2 3 4 5 6 7 8 9
deq2:10 11 12 13 14 15 16 17 18 19
交换后:
deq1:10 11 12 13 14 15 16 17 18 19
deq2:0 1 2 3 4 5 6 7 8 9
插入和删除操作
- push_back(elem); // 在容器尾部添加一个数据
- push_front(elem); // 在容器头部插入一个数据
- pop_back(); // 删除容器最后一个数据
- pop_front(); // 删除容器第一个数据
- insert(deque::iterator pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的置。
- insert(deque::iterator pos,n,elem);//在pos位置插入n个elem数据,无返回值。
- insert(deque::iterator pos,deque::iterator beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
deque<int> v1(5, 100); // 100 100 100 100 100
v1.insert(v1.begin() + 3, 5); // 100 100 100 5 100 100
v1.insert(v1.begin(), 3, 99); // 99 99 99 100 100 100 5 100 100
v1.insert(v1.begin(), v1.begin(), v1.end()); // 99 99 99 100 100 100 5 100 100 99 99 99 100 100 100 5 100 100
deque删除操作
clear(); // 移除容器的所有数据
erase(beg,end); // 删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos); // 删除pos位置的数据,返回下一个数据的位置。
deque<int> deq;
for(int i = 0; i < 10; i++) deq.push_back(i); // 0 1 2 3 4 5 6 7 8 9
deq.erase(deq.begin() + 1, deq.end() - 1); // 0 9
deq.clear(); // 队列为空
上一篇: Stack In Java——对java中栈使用的一些思考
下一篇: Java双向队列Deque