C++初级_deque容器

C++初级_deque容器

deque容器简介

  • deque双端队列是动态大小的序列容器,可以向两端进行伸缩
  • 特定的库可以以不同的方式实现deque,但通常都是一种动态数组。在任何情况下,他都允许通过随机访问迭代器直接访问单个元素,可以根据需要进行动态的伸缩
  • deque提供了一些与vector相似的功能,但deque在头部和尾部进行插入和删除操作时更加高效。与vector不同的是,deque不能保证所有的元素存储在连续的空间内,在deque中通过指针加偏移量的方式访问元素可能会导致非法操作
  • deque与vector提供了相似的接口,因此具有相类似的用途,但是内部的实现原理不同:vector使用了动态数组,该数组需要动态增长;deque中的元素可能分散在不同的存储块中,在deque中保存了一些必要的信息,通常用来在常数范围内直接访问deque中的任何一个元素,所以deque的内部实现比vector复杂,但是这些额外信息使得deque在某些情况下增长的更加的高效,特别是在序列比较大,重新分配成本比较高的情况下
  • 除了频繁的在头部或尾部进行插入和删除操作以外,deque比list和forward_list的性能更差
    deque容器的使用
    (1)构造函数
  • deque()
  • deque(size_type n,const value_type& val=value_type())
  • deque(const deque& x)
  • deque(Inputlterator first,Inputlterator last)
    (2)迭代器
    双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”的假象,落在了deque的迭代器身上
    在这里插入图片描述
  • begin()+end():begin容器的起始位置,end最后一个元素的下一个位置
  • rbegin()+rend():反向迭代器,rbegin与end位置相同,rend与begin位置相同
  • cbegin()+cend():const迭代器,与begin和end的位置相同,但是不能修改其空间中的内容
  • crbegin()+crend():const反向迭代器,crbegin在cend位置,crend在cbegin位置
    (3)容量操作
  • size()
  • empty()
  • resize(size,val)
    (4)访问操作
  • operator[]
  • front()
  • back()
    (5)修改操作
  • push_back()
  • pop_back()
  • push_front()
  • pop_front()
  • insert(pos,val)
  • erase(pos)
  • swap()
  • clear()
#include<iostream>
#include<deque>
#include<algorithm>

using namespace std;

 void PrintDeque(const deque<int>& de)
{
	 for (const auto x : de)
	 {
		 cout << x << " ";
	 }
	 cout << endl;
}


int main()
{
	deque<int> d1;
	deque<int> d2(3,20);
	deque<int> d3(d2.begin(),d2.end());
	deque<int> d4(d3);
	PrintDeque(d4);


	int arr[] = { 23,12,45,24,76 };
	deque<int> d5(arr, arr + sizeof(arr) / sizeof(int));
	PrintDeque(d5);


	for (auto it = d5.begin(); it != d5.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;


	d5.push_back(89);
	d5.push_front(1);
	PrintDeque(d5);
	cout << d5.size() << endl;
	cout << d5.front() << endl;
	cout << d5.back() << endl;


	d5.insert(++d5.begin(), 899);
	PrintDeque(d5);


	d5.pop_back();
	d5.pop_front();
	PrintDeque(d5);


	d5.erase(d5.begin());
	PrintDeque(d5);


	sort(d5.begin(), d5.end());
	PrintDeque(d5);

	return 0;
}

在这里插入图片描述
(6)应用场景

  • 如果只是简单的存储元素,使用vector
  • 如果对元素任意位置进行插入或删除,用list
  • deque的最大应用,就是其作为标准库中stack和queue的底层结构
deque容器C++标准库中的一种双向队列(double-ended queue)容器。它允许在两端进行插入和删除操作,因此可以高效地在头部和尾部进行元素操作。deque的全称是"double-ended queue",意为双端队列。 与vector容器相比,deque容器更适合在两端频繁地插入和删除元素。它的内部实现采用了分块连续内存的结构,每个内部块都可以容纳一定数量的元素。这种分块结构使得deque在两端插入和删除元素的时间复杂度为常数,而在中间插入和删除元素的时间复杂度为线性。 deque容器提供了类似于vector的接口,可以使用push_back()和pop_back()在尾部插入和删除元素,也可以使用push_front()和pop_front()在头部插入和删除元素。此外,还可以使用[]运算符和at()函数访问指定位置的元素。deque还提供了一系列其他操作,例如插入、删除、修改指定范围内的元素等。 要使用deque容器,需要包含<deque>头文件,并使用std命名空间。下面是一个使用deque容器的简单示例: ```cpp #include <deque> #include <iostream> int main() { std::deque<int> deque; deque.push_back(1); deque.push_back(2); deque.push_front(0); for (int i : deque) { std::cout << i << " "; } std::cout << std::endl; return 0; } ``` 以上示例中,首先包含了<deque>头文件,并创建了一个名为dequedeque容器。然后使用push_back()和push_front()分别在尾部和头部插入元素。最后使用for循环遍历deque容器中的元素,并输出结果为"0 1 2"。 希望对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值