C++ deque

STL deque

    STL deque支持随机访问和快速插入删除,是一种容器类函数。

    #include <deque>deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque还支持从开始端插入数据:push_front()。

    deque(包含头文件#include<deque>)由若干段连续空间串接而成,一旦有必要在deque的头部或尾端增加新的空间,便配置一段定量连续的空间,串接在deque的头部或尾端。deque的最大任务,就是在这些分段连续的空间上维护其整体连续的假象,并提供随机存取的接口。

    实际上。deque内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数据会比vector慢。它首次插入一个元素,默认会动态分配512字节空间,当这512字节空间用完后,它会再动态分配自己另外的512字节空间,然后虚拟地连在一起。deque的这种设计使得它具有比vector复杂得多的架构、算法和迭代器设计。它的随机访问和遍历性能比vector差。

    deque是一种优化了的对序列两端元素进行添加和删除操作的基本序列容器。通常由一些独立的区块组成,第一区块朝某方向扩展,最后一个区块朝另一方向扩展。它允许较为快速地随机访问但它不像vector一样把所有对象保存在一个连续的内存块,而是多个连续的内存块。并且在一个映射结构中保存对这些块以及顺序的跟踪。

构造

deque<Elem> c 创建一个空的deque

deque<Elem> c1(c2) 复制一个deque。

deque<Elem> c(n) 创建一个deque,含有n个数据,数据均已缺省构造产生。

deque<Elem> c(n, elem) 创建一个含有n个elem拷贝的deque

deque<Elem> c(beg,end) 创建一个以[beg;end)区间的deque

c.~deque<Elem>() 销毁所有数据,释放内存

方法

c.assign(beg,end) 将[beg; end)区间中的数据赋值给c。

c.assign(n,elem) 将n个elem的拷贝赋值给c。

c. at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。

c.back() 返回容器c的最后一个元素的引用。如果c为空,则该操作未定义。

c.begin() 传回迭代器中的第一个数据地址。

c.clear() 移除容器中所有数据。

c.empty() 判断容器是否为空。

c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一位置。

c.erase(pos) 删除pos位置的数据,传回下一个数据的位置。

c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。

c.front() 返回容器c的第一个元素的引用。如果c为空,则该操作为空。

get_allocator 使用构造函数返回一个拷贝。

c.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置

c.insert(pos,n,elem) 在pos位置插入>n个elem数据。无返回值

c.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值

c.max_size() 返回容器c可容纳的最多元素个数。

c.pop_back() 删除最后一个数据。

c.pop_front() 删除头部数据。

c.push_back(elem) 在尾部加入一个数据。

c.push_front(elem) 在头部插入一个数据。

c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素。

c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素的前一个位置。

c.resize(num) 重新指定队列的长度。

c.size() 返回容器中实际数据的个数。

c.swap(c2) 交换容器c和c2中的所有元素。

swap(c1,c2) 交换容器c1和c2中的所有元素,和上一方法相似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dequeC++标准库中的容器,它是一种双端队列(double-ended queue),可以在两端进行插入和删除操作。在引用中的代码示例中,通过包含头文件<iostream>和<deque>,使用命名空间std来定义了一个名为test的函数。在test函数中,创建了一个deque对象d,并通过d.push_back()函数将元素添加到队列的末尾。然后,使用deque对象d的迭代器构造了一个新的deque对象d2。接着,通过d2.push_back()将10000作为新元素添加到了d2的末尾。最后,通过d.swap(d2)交换了两个deque对象的内容,并通过d.back()获取了d队列中最后一个元素的值,即10000。输出结果为10000。 在引用中的代码示例中,使用了deque对象d的成员函数front()和back()分别返回队列的第一个元素和最后一个元素的值。另外,deque对象d的成员函数insert()可以在指定位置插入一个或多个元素,而erase()可以删除指定位置的一个或多个元素。 应用sort算法对deque进行排序时,可以通过包含头文件<algorithm>,定义一个回调函数compare,该函数用于自定义排序规则,可以根据需要按升序或降序排序。然后,使用sort函数对deque进行排序,并通过printDeque函数输出排序后的deque元素。 除此之外,deque还有一些其他函数,如swap()可以交换两个deque对象的内容,assign()可以将一个给定值赋值给deque中的指定位置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++ deque](https://blog.csdn.net/weixin_59141600/article/details/126898400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++ deque用法详解](https://blog.csdn.net/qq_39779233/article/details/107983598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值