鱼C论坛

 找回密码
 立即注册
查看: 1392|回复: 0

[技术交流] C++旅程第13站——Deque

[复制链接]
发表于 2020-6-17 21:05:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
The most profound statements are often said in silence.
                                                                         Deque
功能:双端数组,可以对头端进行插入删除操作

deque与vector区别:
1、vector对于头部的插入删除效率低,数据量越大,效率越低;
2、deque相对而言,对头部插入删除的速度会比vector快;
3、vector访问元素时的速度会比deque快。

deque内部工作原理:
deque内部由个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据。
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间

  1. #include<iostream>
  2. #include<deque>
  3. #include<algorithm>

  4. using namespace std;

  5. void printdeque(const deque<int>&d)
  6. {
  7.         for (deque<int>::const_iterator it = d.begin();it != d.end();it++)
  8.         {
  9.                 cout << *it << " ";
  10.         }
  11.         cout << endl;
  12. }

  13. void test1()
  14. {
  15.         deque<int>d1;
  16.        
  17.         for (int i = 0;i < 10; i++)
  18.         {
  19.                 d1.push_back(i);
  20.         }
  21.         printdeque(d1);
  22.                
  23.         deque<int>d2(d1.begin(),d1.end());
  24.         printdeque(d2);
  25.        
  26.         deque<int>d3(10,999);
  27.         printdeque(d3);
  28.        
  29.         deque<int>d4(d3);
  30.         printdeque(d4);
  31. }

  32. void test2()
  33. {
  34.         deque<int>d1;
  35.        
  36.         for (int i = 0; i < 10; i++)
  37.         {
  38.                 d1.push_back(i);
  39.         }
  40.         printdeque(d1);
  41.        
  42.         //operator= 赋值
  43.         deque<int>d2;
  44.         d2 = d1;
  45.         printdeque(d2);
  46.        
  47.         //assign 赋值
  48.         deque<int>d3;
  49.         d3.assign(d1.begin(),d1.end());
  50.         printdeque(d3);
  51.        
  52.         deque<int>d4;
  53.         d4.assign(10,999);
  54.         printdeque(d4);
  55. }

  56. void test3()
  57. {
  58.         deque<int>d1;
  59.        
  60.         for (int i = 0;i < 10;i++)
  61.         {
  62.                 d1.push_back(i);
  63.         }
  64.         printdeque(d1);
  65.        
  66.         if (d1.empty())
  67.         {
  68.                 cout << "d1为空!!!!!!!" << endl;
  69.         }
  70.         else
  71.         {
  72.                 cout << "d1不为空!!!!!!" << endl;
  73.                 cout << "d1的大小为:  " << d1.size() << endl;
  74.                 //deque容器没有容量概念
  75.         }
  76.        
  77.         //重新指定大小
  78.         d1.resize(15);
  79.         printdeque(d1);
  80.        
  81.         d1.resize(20,6);
  82.         printdeque(d1);
  83.        
  84.         d1.resize(5);
  85.         printdeque(d1);
  86. }

  87. void test4()
  88. {
  89.         //插入和删除提供的位置是迭代器
  90.         deque<int>d1;
  91.        
  92.         //尾插
  93.         d1.push_back(22);
  94.         d1.push_back(66);
  95.        
  96.         //头插
  97.         d1.push_front(100);
  98.         d1.push_front(200);
  99.        
  100.         printdeque(d1);//200 100 22 66
  101.        
  102.     //尾删
  103.         d1.pop_back();
  104.         printdeque(d1);//200 100 22
  105.        
  106.         //头删
  107.         d1.pop_front();
  108.         printdeque(d1);//100 22
  109.        
  110.         //insert 插入
  111.         d1.insert(d1.begin(),1000);
  112.         printdeque(d1);//1000 100 22
  113.        
  114.         d1.insert(d1.begin(),2,9999);
  115.         printdeque(d1);//9999 9999 1000 100 22
  116.        
  117.         //按区间进行插入
  118.         deque<int>d2;
  119.         d2.push_back(1);
  120.         d2.push_back(2);
  121.         d2.push_back(3);
  122.        
  123.         d1.insert(d1.begin(),d2.begin(),d2.end());
  124.         printdeque(d1); //1 2 3 9999 9999 1000 100 22
  125.        
  126.         //删除
  127.         deque<int>::iterator it = d1.begin();
  128.         it++;
  129.         d1.erase(it);
  130.         printdeque(d1);//1 3 9999 9999 1000 100 22
  131.        
  132.         //按区间方式删除
  133.         d1.erase(d1.begin(),d1.end());
  134.         d1.clear();
  135.         printdeque(d1);
  136. }

  137. void test5()
  138. {
  139.         deque<int>d1;
  140.        
  141.         d1.push_back(999);
  142.         d1.push_back(888);
  143.         d1.push_back(666);
  144.         d1.push_front(111);
  145.         d1.push_front(222);
  146.         d1.push_front(333);
  147.        
  148.         //通过[]方式访问元素
  149.         for (int i = 0; i < d1.size(); i++)
  150.         {
  151.                 cout << d1[i] << " ";
  152.         }
  153.         cout << endl;
  154.        
  155.         //通过at方式访问元素
  156.         for(int i = 0; i < d1.size(); i++)
  157.         {
  158.                 cout << d1.at(i) << " ";
  159.         }
  160.         cout << endl;
  161.        
  162.         cout << "第一个元素为: " << d1.front() << endl;
  163.         cout << "最后一个元素为:  " << d1.back() << endl;
  164. }

  165. void test6()
  166. {
  167.         deque<int>d1;
  168.        
  169.         d1.push_back(123);
  170.         d1.push_back(234);
  171.         d1.push_back(345);
  172.         d1.push_front(890);
  173.         d1.push_front(789);
  174.         d1.push_front(678);
  175.        
  176.         printdeque(d1);
  177.        
  178.         //排序 从小到大 升序
  179.         //对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
  180.         //vector容器也可以利用sort()进行排序
  181.         sort(d1.begin(),d1.end());
  182.         cout << "排序后!!!!!!!!!" << endl;
  183.         printdeque(d1);
  184. }

  185. int main()
  186. {
  187.         test1();//deque构造函数
  188.        
  189.         test2();//deque赋值操作
  190.        
  191.         test3();//deque大小操作
  192.        
  193.         test4();//deque插入和删除
  194.        
  195.         test5();//deque数据存取
  196.        
  197.         test6();//deque排序
  198.        
  199.         return 0;
  200. }
复制代码

                                                                            给你一个波

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-17 11:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表