C/C++笔记总结——deque容器

一、基本概念

        deque容器实际上是一个双端数组,可以对头端进行插入和删除操作。deque容器和vector容器的用法基本相同,他们的不同点在于:

        1.vector 对于头部的插入删除效率低,因为vector无法直接对头部元素进行操作。

        2.deque容器相对vector而言,对头部插入删除速度较快。

        3.vector访问元素时的速度比deque块,这和两者的内部实现有关。

        在实际应用中,我们要会根据实际情况选择不同的容器完成任务。

二、基本方法

        deque的构造方法和vector的构造方法相同,可以参照我的另一篇关于vector容器的讲解的文章C/C++笔记总结——vector容器_给你糖ya的博客-CSDN博客。也可以看我写的构造一个deque容器的代码。

2.1 构造函数

void text01() {			//构造函数
	deque<int>d1;						//1.尾插法赋值
	for (int i = 0; i < 10; i++) {
		d1.push_back(i);
	}
	printDeque(d1);

	deque<int>d2 = d1;					//2.等号赋值 拷贝构造
	printDeque(d2);

	deque<int>d3;
	d3.assign(d2.begin(), d2.end());	//3.assign区间赋值
	printDeque(d3);

	deque<int>d4;
	d4.assign(10, 100);					//4.assign赋值n个值
	printDeque(d4);

	deque<int>d5(10, 100);				//5.创建时赋值
}

2.2 其他基本方法

        下面列出关于deque容器的其他基本方法。

deque容器基本方法
方法名功能注意事项
push_back(elem)尾删特定元素elem
push_front(elem)头插特定元素elem
empty()判断是否为空返回值是bool类型,为空返回true,否则返回false
size()

返回容器大小

resize(elem)

重新指定大小为elem

若elem比原容器大小大,用0补充;若elem比原容器大小小,删除多余元素
pop_back()尾删元素
pop_front()头删元素
insert(pos,elem)

在pos处插入elem元素的拷贝

pos是迭代器,不是int型数字
insert(pos,n,elem)

在pos位置插入n个elem数据

pos是迭代器,不是int型数字
clear()

清空容器所有数据

erase(begin,end)

删除[begin,end)区间的数据

参数是迭代器,不是int型数字
erase(pos)

删除pos位置的数据

pos是迭代器,不是int型数字
front()

返回头部元素

back()

返回尾部元素

sort(iterator begin,iterator end)

对begin和end区间内的元素进行排序

参数是迭代器,不是int型数字

2.3 迭代器简单理解

        大家需要注意的是,在进行插入和删除操作的时候,参数是迭代器(iterator),不是int类型。迭代器在初期可以简单理解为 begin(),end() 是迭代器。我们先看基本的插入和删除操作:

void text() {			//插入和删除操作
	deque<int>d1;
	d1.push_back(10);	//尾插
	d1.push_back(30);
	d1.push_back(5);
	d1.push_front(20);	//头插
	printDeque(d1);
	d1.pop_back();		//尾删
	d1.pop_front();		//头删
	printDeque(d1);

	//insert插入
	d1.insert(d1.begin(), 100);		
	printDeque(d1);
	d1.insert(d1.begin(), 2, 400);		//在头部插入2个400
	printDeque(d1);

	//删除
	d1.erase(d1.begin(),d1.end());

        那如果我们想对除了头尾之外的位置进行插入和删除操作怎么办呢?这时候我们需要提前声明一个迭代器 it ,对 it 可以进行加减操作。

d1.erase(d1.begin(),d1.end());
deque<int>::iterator it = d1.begin();
//中间对it进行加减操作
it++;
d1.erase(it);

2.4 大小操作

        了解一下 empty 和 resize 的基本用法。

void text() {			//大小操作
	deque<int>d1;						//1.尾插法赋值
	for (int i = 0; i < 10; i++) {
		d1.push_back(i);
	}
	printDeque(d1);
	if (d1.empty()) {			//如果d1为空
		cout << "d1为空" << endl;
	}
	else {
		cout << "d1不为空" << endl;
		cout << "d1的大小为:" << d1.size() << endl;
		//deque容器没有容量的概念,因为可以无限往里填充数据
	}
	//重新指定大小
	d1.resize(15);		//默认多出的位数用0填充
	printDeque(d1);

	d1.resize(15, 4);	//用4填充多余位数
	d1.resize(5);		//如果小于原来的大小,会删除多余元素
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值