欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

queue && deque

程序员文章站 2024-02-11 19:27:04
...

一、queue

queue是一种先进先出的数据类型,有头部和尾部,头部负责数据的出队,尾部负责数据的入队。不支持遍历操作

queue && deque

数据操作

  • 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();
	}
}

运行结果:
queue && deque

二、deque

deque与queue不同,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(); // 队列为空
相关标签: 数据结构