C++之Deque容器初学(一)

Deque简介

² deque“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。

² deque在接口上和vector非常相似,在许多操作的地方可以直接替换。

² deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。

² deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。

² #include <deque>  

deque对象的默认构造

deque采用模板类实现,deque对象的默认构造形式:deque<T> deqT;  

deque <int> deqInt;            //一个存放intdeque容器。

deque <float> deq Float;     //一个存放floatdeque容器。

deque <string> deq String;     //一个存放stringdeque容器。

...    

 //尖括号内还可以设置指针类型或自定义类型。 

 

deque末尾的添加移除操作

理论知识:

² deque.push_back(elem); //在容器尾部添加一个数据

² deque.push_front(elem); //在容器头部插入一个数据

² deque.pop_back();     //删除容器最后一个数据

² deque.pop_front(); //删除容器第一个数据

 

deque<int> deqInt;

deqInt.push_back(1);

deqInt.push_back(3);

deqInt.push_back(5);

deqInt.push_back(7);

deqInt.push_back(9);

deqInt.pop_front();

deqInt.pop_front();

deqInt.push_front(11);

deqInt.push_front(13);

deqInt.pop_back();

deqInt.pop_back();

//deqInt  { 13,11,5}

 

deque的数据存取

理论知识:

² deque.at(idx);  //返回索引idx所指的数据,如果idx越界,抛出out_of_range。

² deque[idx];  //返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。

² deque.front();   //返回第一个数据。

² deque.back();  //返回最后一个数据

deque<int> deqInt;

deqInt.push_back(1);

deqInt.push_back(3);

deqInt.push_back(5);

deqInt.push_back(7);

deqInt.push_back(9);

 

int iA = deqInt.at(0); //1

int iB = deqInt[1]; //3

deqInt.at(0) = 99; //99

deqInt[1] = 88; //88

 

int iFront = deqInt.front(); //99

int iBack = deqInt.back(); //9

deqInt.front() = 77; //77

deqInt.back() = 66; //66



测试代码如下所示:

#include <iostream>
using namespace std;
#include "deque"

void prinV(deque<int> &v) 
{
	for (int i = 0; i<v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
}

void erroR(deque<int> &v)
{
	//抛异常
	try
	{
		for (int i = 0; i < v.size() + 3; i++)
		{
			cout << v.at(i) << " ";
		}
	}
	catch (...)
	{
		cout << "发生异常!" << endl;
	}
}

void main1()
{
	deque<int> d1;
	//插入数据
	d1.push_back(10);
	d1.push_back(9);//尾部
	d1.push_front(5);
	d1.push_front(6);//头部
	cout << "头部元素" << d1.front() << endl;
	cout << "尾部元素" << d1.back() << endl;
	prinV(d1);
	//删除数据
	d1.pop_back();
	d1.pop_front();
	prinV(d1);
	//用deque.at(i)抛异常
	erroR(d1);
	
}


int main() 
{
	main1();
	return 0;
}

运行结果如图所示:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值