STL_deque_c++常见操作用法解析

deque是STL中的部分,中文意思为"双端队列"。deque头端和尾端都能实现快速的元素的插入和删除,而vector只能在尾端实现快速插入删除。但是在中间中端实现插入和删除和vector相似,对比头尾端会慢很多。
使用deque时需要带上头文件和命名空间:

#include <deque>
using namespace std;

一.deque 默认构造和带参构造

	//edque 的默认构造
	deque<int> deqInt; //存放int类型的deque容器
	deque<float> deqFloat; //存放float类型的deque容器
	deque<student> deqStu; //存放自定义类的容器

	//deque 的带参构造
	deque<int> deqInt1(10); //存放10个元素在deqInt1中,元素值默认为0
	deque<int> deqInt2(10, 666); //存放10个元素在deqInt2中,元素值为666
	deque<int> deqInt3(deqInt.begin(), deqInt.end());//将[begin,end)区间中的元素拷贝给deqInt3
	deque<int> deqInt4(deqInt1); //将deqInt1中的所有元素拷贝给deqInt4
	

二.deque的赋值

	deque<int> deqIntA, deqIntB, deqIntC, deqIntD;

	deqIntA.push_back(1);
	deqIntA.push_back(2); 
	deqIntA.push_back(3);
	deqIntA.push_back(4);
	deqIntA.push_back(5);
	
	//assign赋值
	deqIntB.assign(deqIntA.begin(), deqIntA.end()); //将deqIntA[begin end)区间的元素赋值给deqIntB
	deqIntC.assign(4, 888);  //给deqIntC重新分配元素个数为4,元素值为888
	
	// = 赋值
	deqIntD = deqIntA;       //将deqIntA的所有元素赋值给deqIntD
	
	//swap交换
	deqIntD.swap(deqIntC);   //交换deqIntC和deqIntD的元素和值
	

三.deque的大小

	deque<int> deqIntA(5, 5);
	
	//size查看元素个数
	cout << "deque 的元素个数: " << deqIntA.size() << endl; //打印出deqIntA的元素个数

	//resize调整大小
	deqIntA.resize(7);    //重新调整元素个数,扩长的部分默认为0
	deqIntA.resize(3);    //重新调整元素个数,缩短剩3个元素,其余全被移除
	deqIntA.resize(8, 1); //重新调整元素个数,扩长部分的元素值为1
	

四.deque头部和尾部的添加与删除元素

	deque<int> deqInt;

	//push_back尾部添加
	deqInt.push_back(4); //尾部添加一个元素,值为1
	deqInt.push_back(5); //尾部添加一个元素,值为2
	deqInt.push_back(6); //尾部添加一个元素,值为2

	//push_front头部添加
	deqInt.push_front(3); //头部添加一个元素,值为3
	deqInt.push_front(2); //头部添加一个元素,值为2
	deqInt.push_front(1); //头部添加一个元素,值为1

	//pop_back尾部移除
	deqInt.pop_back(); //移除最尾部一个元素 剩余1 2 3 4 5

	//pop_front头部移除
	deqInt.pop_front(); //移除最头部一个元素 剩余2 3 4 5
	

五.deque的数据存取

	//下标存取
	//注意越界访问
	int i2 = deqInt[1];          //int变量i2被赋值为deqInt下标为1的元素
	deqInt[1] = 888;             //将下标为1的元素的值改为888

	//at存取
	//注意越界访问
	int i1 = deqInt.at(0);       //int变量i1被赋值为deqInt下标为0的元素
	deqInt.at(0) = 666;          //将下标为0的元素的值改为666

	//front back存取
	int iFront = deqInt.front(); //将最前元素的值赋值给iFront
	int iBack = deqInt.back();   //将最后元素赋值给iBack
	deqInt.front() = iFront;     //将iFront的值赋值给最前元素
	deqInt.back() = iBack;       //将iBack的值赋值给最后元素

六.deque的插入与删除

	deque<int> deqInt, deqInt1;

	deqInt.push_back(1);
	deqInt.push_back(2);
	deqInt.push_back(3);
	deqInt.push_back(4);

	deqInt1.push_back(10);
	deqInt1.push_back(20);
	deqInt1.push_back(30);
	deqInt1.push_back(40);

	//deque插入
	deqInt.insert(deqInt.begin(), 0); //在deqInt的最前元素位置插入一个元素0
	deqInt.insert(deqInt.begin() + 1, 2, 88); //在deqInt的最前元素加1的位置插入2个元素,值为88,也就是下标为1的位置
	deqInt.insert(deqInt.end(), deqInt1.begin(), deqInt1.end()); //在deqInt的最后元素位置拷贝插入deqInt[begin end)区间的元素 注意:[前闭后开)
	deqInt.insert(deqInt.end(), deqInt1.rbegin(), deqInt1.rend()); //在deqIntR的最后面元素位置逆转拷贝插入deqIntY[begin end)区间的元素 注意:[前闭后开)

	//deque删除
	//删除单个元素
	deqInt.erase(deqInt.begin() + 1); //删除最前元素加1的元素,也就是下标为1的元素

	//删除多个元素
	deqInt.erase(deqInt.begin() + 1, deqInt.begin() + 3); //删除[deqIntR[1] deqIntR[3])区间的元素 注意:[前开后闭),也就是删除下标为1的元素到下标为2的元素

	//删除所有元素
	deqInt.erase(deqInt.begin(), deqInt.end()); //删除所有元素
	deqInt.clear(); //删除所有元素

	//使用迭代器删除元素中指定的值
	for (deque<int>::iterator it = deqInt.begin(); it != deqInt.end();) {
		if (*it == 4) {
			it = deqInt.erase(it);
		}
		else {
			cout << *it << "\t";
			it++;
		}
	}
	

七.deque与迭代器

	deque<int> deqInt(10, 5);
	
	//下标访问元素
	for (unsigned int i = 0; i < deqInt.size(); i++) {
		cout << deqInt[i] << "\t";
	}

	//普通迭代器访问元素
	for (deque<int>::iterator it = deqInt.begin(); it != deqInt.end(); it++) {
		(*it)++; //注意:(*it)++是取值再加加操作,而*it++是加加指针再取值
		cout << *it << "\t";
	}

	//常量迭代器访问元素
	for (deque<int>::const_iterator cit = deqInt.cbegin(); cit != deqInt.cend(); cit++) {
		//	(*it)++; //注意:常量迭代器不能修改值
		cout << *cit << "\t";
	}

	//逆转迭代器访问元素
	for (deque<int>::reverse_iterator rit = deqInt.rbegin(); rit != deqInt.rend(); rit++) {
		cout << *rit << "\t";
	}

	//常量逆转迭代器访问元素
	for (deque<int>::const_reverse_iterator crit = deqInt.crbegin(); crit != deqInt.crend(); crit++) {
		//(*crit)++; //注意:常量的逆转迭代器不能修改值
		cout << *crit << "\t";
	}
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值