C++ STL/ (4) deque

deque是常见的双端数组。用处很广,本节就介绍相关概念并实现一个简单的评委打分系统。

  • deque的基本概念
    • 什么是deque?
    • deque的功能
    • deque的实现方法
  • deque常用API

    • deque构造函数
    • deque赋值
    • deque元素存取
    • deque大小
    • deque插入与删除
  • deque应用:评委打分系统


  • deque基本概念
    • 什么是deque?
      我们知道vector是一个单口容器,相当于一个动态数组。而deque则是一个双口容器,是一个双端数组。也就是说,deque提供方法能够在首尾以O(1)的时间复杂度插入删除元素。
    • deque的基本功能
      我们还是以一张图来说明:
      deque
    • deque实现方法
      deque利用分块的连续存储空间来实现首尾元素的插入和删除。
      deque利用中控器管理分块的连续存储空间。中控器中存放的是各块内存空间的首地址(即指针)。
      deque_theory

  • deque常用API

    • deque的初始化

          deque<int> d;
          deque<int> d1(10,1);
          deque<int> d2(d1);
          deque<int> d3(d2.begin(),d2.end());
          deque<int> d4=d3;
      
          for(int i=0;i<d1.size();i++){
              cout<<d1[i]<<d2[i]<<d3[i]<<d4[i]<<endl;
              }
      
    • deque赋值

      deque<int> d, d2, d3, d4;
      deque<int> d5(10, 1);
      d = d5;
      d2.assign(d5.begin(), d5.end());
      d3.assign(10,2);
      //d4.assign(d3); 没有这种写法
      for (int i = 0; i<d.size(); i++){
          cout << d[i] << d2[i] << d3[i] << d5[i] << endl;
      }
    • deque元素存取

          deque<int> d,d1;
          deque<int> d2(10,1);
          cout<<d2.front()<<" "<<d2.back()<<endl;
          for(int i=0;i<d2.size();i++){
              cout<<d2.at(i)<<" ";
          }
          cout<<endl;
      
    • deque大小
      deque没有capacity和reserve

          deque<int> d(10,1);
      
          if(d.empty()){
              cout<<"d is empty!!!"<<endl;
          }
          else{
              cout<<"d is not empty!!"<<endl;
          }
      
          cout<<"d.size: "<<d.size()<<endl;
          for(int i=0;i<d.size();i++){
              cout<<"ele "<<i <<" :"<<d.at(i)<<" ";
          }
          cout<<endl;
          d.resize(5);
          cout<<"d.size: "<<d.size()<<endl;
          for(int i=0;i<d.size();i++){
              cout<<"ele "<<i <<" :"<<d.at(i)<<" ";
          }
          cout<<endl;
    • deque插入和删除

      • 插入
        • insert(iterator,num,ele);
        • push_back(ele) ;
        • push_front(ele);
      • 删除
        • erase(iterator start,iterator end);
        • erase(iterator pos);
        • clear();
        • pop_back();
        • pop_front();

      这里的插入删除用法跟vector中的用法一样,就不重复了。


  • deque应用:评委打分系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值