C++之标准库(STL)容器deque的用法

deque说明

  • deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。

  • 使用前需加头文件

#include<deque>

deque定义

deque<typename> d; //typename表示队列中元素的类型

deque使用

在这里插入图片描述
从上图可以看出 deque可以在两端都可以操作。

deque赋值操作
  • assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
  • assign(n, elem);//将n个elem拷贝赋值给本身。
  • deque& operator=(const deque &deq); //重载等号操作符
  • swap(deq);// 将deq与本身的元素互换
//例1:assign(beg, end)
deque<int> d;
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
d.assign(a,a+6);
//例2:assign(n, elem)
deque<int> d;
d.assign(3,6);
//例4:swap(deq)
deque<int> d1,d2;
d1.assign(3, 6);
d2.assign(4, 8);
d1.swap(d2)

结果:

11 2 3 4 5 626 6 64:d1元素:8 8 8 8  ;d2元素:6 6 6
deque双端插入和删除操作
  • push_back(elem);//在容器尾部添加一个数据
  • push_front(elem);//在容器头部插入一个数据
  • pop_back();//删除容器最后一个数据
  • pop_front();//删除容器第一个数据
deque数据存取
  • at(idx);//返回索引idx所指的数据,如果idx越界,抛出out_of_range。
  • operator[];//返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
  • front();//返回第一个数据。
  • back();//返回最后一个数据

例1:

#include<deque>
using namespace std;
int main()
{
	deque<int> d;
	d.push_front(1);
	d.push_back(2);

	cout << "result1:" << d.at(0) << endl;
	cout << "result2:" << d.operator[](0) << endl;
	cout << "result3:" << d.front() << endl;
	cout << "result4:" << d.back() << endl;
	
	return 0;
}

运行结果:

result1:1
result2:1
result3:1
result4:2
deque插入操作
  • insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。
  • insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
  • insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值

例2:

#include<deque>

int main()
{
	deque<int> d;
	d.push_front(1);
	d.push_back(2);
	d.insert(d.begin(),6);   //insert(pos,elem)
	d.insert(d.begin(),3, 8);  //insert(pos,n,elem)
	int a[5] = { 1,2,3,4,5 };
	d.insert(d.begin(),a ,a+2);  //insert(pos,beg,end)
	for (int i = 0; i < d.size(); i++)
	{
		cout << d[i] << endl;
	}
	return 0;
}

运行结果:

插入前:1 2
插入后:1 2 8 8 8 6 1 2
deque删除操作
  • clear();//移除容器的所有数据
  • erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
  • erase(pos);//删除pos位置的数据,返回下一个数据的位置。

例3:

#include<deque>

int main()
{
	deque<int> d,d2;

	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	d.assign(a,a+6);
	d.erase(d.begin(), d.begin()+3);   //erase(beg,end)

	for (int i = 0; i < d.size(); i++)
	{
		cout << d[i] << endl;
	}
	return 0;
}

运行结果:

删除前:1,2,3,4,5,6
删除后:4,5,6
deque访问

队列中元素的访问有两种方法:一种通过迭代器进行访问,一种通过下标进行访问;
例4:



//过下标进行访问
for (int i = 0; i < d.size(); i++)  //d为非空的队列
{
	cout << d[i] << endl;
}

//通过迭代器进行访问
deque<int>::iterator it;
for (it = d.begin() ; it != d.end(); ++it)
{
	cout << *it <<endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xp_fangfei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值