c++提高篇——deque容器

一、基本概念

deque容器是一个双端数组,可以对头端进行插入删除操作,也可以对尾端进行如上的操作,它与vector容器有所差异,具体体现如下:
1、 vector对于头部的插入删除效率低,数据量越大,效率越低
2、 deque相对而言,对头部的插入删除速度比vector快
3、 vector访问元素时的速度会比deque快,这和两者内部实现有关
具体的内部结构如下所示:
在这里插入图片描述
deque内部有中控器维护每段缓冲区中的内容,缓冲区中存放真实数据,中控器维护的是每个缓冲区的地址,使得使用deque时像—片连续的内存空间。deque容器的迭代器也是支持随机访问的。在这里插入图片描述

二、deque容器的构造函数

deque deqT; 默认构造形式。
deque( beg, end); 构造函数将[beg. end)区间中的元素拷贝给本身。
deque(n, elem);构造函数将n个elem拷贝给本身。
cdeque(const deque &deq); 拷贝构造函数。

具体的实现方法如下:

	deque<int> d;
	for (int i = 0; i < 7; i++)
	{
		//默认构造
		d.push_back(i);
	}
	PrintDeque(d);
	//第二种构造方式
	deque<int> d1(d.begin(), d.end());
	PrintDeque(d1);

	//第三种构造方式
	deque<int> d2(10, 100);
	PrintDeque(d2);

	//第三种构造方式
	deque<int> d3(d2);
	PrintDeque(d3);

只读迭代器的实现:

void PrintDeque(const deque<int> &d)
{
	//借用const_iterator来实现在迭代过程中,不可修改容器中的内容
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

三、deque容器的赋值操作

语法如下:
deque& operator=( const deque &deq ) ; 重载等号操作符。
assign (beg,end ) ;将[beg, end)区间中的数据拷贝赋值给本身。
assign(n,elen); 将n个elem拷贝赋值给本身。
这里的语法样例就不再说明了,与vector容器的操作方式一致。链接: https://blog.csdn.net/qq_52302919/article/details/129117795

四、deque容器大小操作

对deque容器的大小进行操作,具体语法如下:
deque.empty(); 判断容器是否为空
deque.size();返回容器中元素的个数
deque.resize( num ) ;重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize( nun, elem);重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
这里的语法样例就不再说明了,与vector容器的操作方式一致。

五、deque容器插入和删除

给deque容器中进行插入和删除操作,具体语法如下:
push_back(elem);尾插法
push_back(elem);头插法
pop_back();尾删法
pop_front();头删法
insert(pos,elem);在pos位置插入一个elem元素的拷贝,返回新数据的位置。
insert ( pos, n, elem); 在pos位置插入n个elem数据,无返回值。
insert( pos ,beg, end) ;在pos位置插入[beg,end)区间的数据,无返回值。clear( );清空容器的所有数据
erase(beg ,end) ;删除[beg.end)区间的数据,返回下一个数据的位置。
erase( pos);删除pos位置的数据,返回下一个数据的位置。
部分样例如下:

	//在容器d中的开头位置插入d1从begin到end区间的数据
	d.insert(d.begin(), d1.begin(), d1.end());

六、deque容器的数据存取操作

函数接口如下:
at(int idx); 返回索引idx所指的数据
operator[];返回索引idx所指的数据
front();返回容器中第一个数据元素
back();返回容器中最后一个数据元素
这里的语法样例就不再说明了,与vector容器的操作方式一致。

七、deque排序

可以利用算法对deque内部的数据进行排序
sort(iterator beg, iterator end) ;对beg和end区间内元素进行排序

样例如下:

	//创建容器
	deque<int> d;

	//尾插数据
	d.push_back(10);
	d.push_back(5);
	d.push_back(15);
	d.push_back(3);

	//打印容器内的内容
	printd1(d);

	//对容器内的内容进行排序,默认排序规则为升序
	//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
	sort(d.begin(), d.end());

	//打印容器内的内容
	printd1(d);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值