c++STL学习——deque

本文详细介绍了STL中的双端队列(deque)容器,包括其特点、基本操作、数据存取方式以及如何使用迭代器进行高效操作。通过代码示例展示了如何使用deque删除容器中的重复元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双端队列(deque)

Deque简介

  • deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。
  • deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
  • deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。
  • deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。
  • 头文件#include

deque对象的默认构造

deque采用模版类实现,默认构造形式:deque<T> deqT

deque<int> deqInt; //一个存放int的deque容器
deque<double> deqDouble; //一个存放double的容器
deque<string> deqString; //一个存放string的容器
//尖括号内还可以存放设置指针类型或其他自定义类型

deque末尾的添加或移除操作

push_back(elem); //在容器尾部加入一个元素
push_front(elem); //在容器头部加入一个元素
pop_back(); //删除尾部元素
pop_front(); //删除头部元素

deque数据的存取

deque.at(idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range。
deque[idx]; //返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
deque.front(); //返回第一个元素
deque.back(); //返回最后一个元素

deque与迭代器

deque.begin(); //返回第一个元素的迭代器
deque.end(); //返回最后一个元素之后的迭代器
deque.rbegin(); //返回指向尾部的逆向迭代器
deque.rend(); //返回指向头部的逆向迭代器

deque的大小

deque.size(); //返回容器中元素的个数
deque.empty(); //判断容器是否为空
deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize(num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

deque的插入

deque.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
deque.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。
deque.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值。

deque的删除

deque.clear(); //移除容器的所有内容
deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
deque.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。 

代码演示

删除容器中重复的元素

#include<iostream>
#include<deque>
#include<iterator>
using namespace std;
int main()
{
	int a[10]={1,3,2,3,3,3,4,3,5,3};
	deque<int> deInt(a,a+10);
	cout<<deInt.size()<<endl; //10
	for(deque<int>::iterator it=deInt.begin();it!=deInt.end();)
	{
		if(*it==3)
			it=deInt.erase(it); //删除迭代器所指元素,并返回下一个元素的迭代器
		else
			it++;
	}
	for(deque<int>::iterator it=deInt.begin();it!=deInt.end();it++)
	{
		cout<<*it<<" "; //1 2 4 5
	}
	cout<<endl;
	deInt.erase(deInt.begin(),deInt.end());
	cout<<deInt.size()<<endl; //0
	return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值