STL deque容器

一、简单介绍

​ $ deque$ 的存储空间并不是连续的。内部的实现通常是一种特殊的数据结构,被称为分段数组。允许在两端进行高效的插入与删除操作,同时还支持随机访问。(支持随机访问是因为dequedequedeque 维护了一个中央目录,其中存储了指向每个块的指针)

二、定义与使用
  • 创建一个没有任何元素的空deque容器

    • std::deque<int> d
      
  • 创建一个具有n个元素,默认值为m的deque

    • std::deque<int> d(n,m);
      
  • 通过拷贝的方式创建一个新的deque

    • std::deque<int> d2(d1);   //d1是以及存在的deque
      
  • 拷贝其他类型的指定区域的元素

    • //拷贝普通数组,创建deque容器
      int a[] = { 1,2,3,4,5 };
      std::deque<int>d(a, a + 5);
      //适用于所有类型的容器
      std::array<int, 5>arr{ 11,12,13,14,15 };
      std::deque<int>d(arr.begin()+2, arr.end());//拷贝arr容器中的{13,14,15}
      
三、遍历方式
  • 索引for循环

    • for(std::size_t i=0;i<mydeque ;i++){
      	std::cout<<mydeque[i]<<std::endl;
      }
      
  • 基础for循环

    • for(const auto & i:mydeque){
      	std::cout<<i<<std::endl;
      }
      
  • 迭代器 for遍历

    • for(auto it=mydeque.begin();it!=mydeque;it++){
      	std::cout<<*it<<std::endl;
      }
      
四、相关函数
  • assignassignassign 函数

    • void assign(InputIterator First,InputIterator Last)
      //First 要从参数deque中复制一系列元素的第一个元素
      //Last 超出deque中复制一系列元素的第一个元素
      
    • void assign(size_type Count,const Type& Val);
      //Count 要插入deque中的元素副本的个数
      // 插入到deque中的元素的值
      
    • void assign(initializer_list <Type> IList);
      //IList 要插入deque中的initializer_list
      
  • atatat 函数

    • reference at(size_type pos);
      const_reference at(size_type pos);//返回deque中指定位置的元素的引用
      //溢出抛出std::out_of_range 的异常
      
  • backbackback 函数

    • reference back();
      const_reference back() const;//返回对deque中最后一个元素的引用
      
  • frontfrontfront 函数

    • reference front();
      const_reference front() const;//返回对deque中第一个元素的引用
      
  • beginbeginbegin 函数

    • const_iterator begin() const;
      iterator begin();//发现 deque 中第一个元素或空 deque 之后的位置的随机访问迭代器
      
  • endendend 函数

    • const_iterator end() const;
      iterator end();
      
  • cbegincbegincbegin 函数

    • const_iterator cbegin() const; //返回确定范围中第一个元素地址的 const 迭代器
      
  • cendcendcend 函数

    • const_iterator cend() const; //返回一个 const 迭代器,此迭代器用于发现刚超出范围中最后一个元素的位置
      
  • clearclearclear 函数

    • void clear();//清除deque所有函数
      
  • emplaceemplaceemplace 将构造的元素放到指定位置的dequedequedeque 中

    • iterator emplace(
          const_iterator _Where,
          Type&& val);
      // _where 插入第一个元素的位置
      // val 插入到deque 中的元素的值
      //该函数将返回一个指向 deque 中新元素的插入位置的迭代器。
      
  • emplace_backemplace\_backemplace_back 函数

    • void emplace_back(Type&& val);// val 添加到 deque 末尾的元素
      
  • emplace_frontemplace\_frontemplace_front 函数

    • void emplace_front(Type&& val);  //val 要添加到 deque 开头的元素
      
  • emptyemptyempty 函数

    • bool empty() const;  //如果 deque 为空,则为 true;如果 deque 不为空,则为 false
      
  • eraseeraseerase 函数

    • iterator erase(iterator _Where);
      iterator erase(iterator first, iterator last);
      // _where 要从 deque 中移除的元素的位置
      // first 要从 deque 中移除的第一个元素的位置
      //last 要从 deque 中移除的刚超出最后一个元素的位置
      
  • $insert $ 函数

    • iterator insert(
          const_iterator Where,
          const Type& Val);
      
      iterator insert(
          const_iterator Where,
          Type&& Val);
      // && 在这里就是使用move()函数进行传参,减少不必要空间的浪费
      
      void insert(
          iterator Where,
          size_type Count,
          const Type& Val);
      
      template <class InputIterator>
      void insert(
          iterator Where,
          InputIterator First,
          InputIterator Last);
      
      iterator insert(
          iterator Where,initializer_list<Type>
      IList);
      
  • max_sizemax\_sizemax_size 函数

    • size_type max_size() const; //返回deque的最大长度
      
  • pop_backpop\_backpop_back 函数

    • void pop_back(); //删除deque末尾处的元素
      
  • pop_frontpop\_frontpop_front 函数

    • void pop_front(); //删除deque开头的元素
      
  • push_backpush\_backpush_back 函数

    • void push_back(const Type& val);
      
      void push_back(Type&& val);//将元素添加到deque的末尾
      
  • push_frontpush\_frontpush_front 函数

    • void push_front(const Type& val);
      void push_front(Type&& val);   //将元素添加到开头
      
  • resizeresizeresize 函数

    • void resize(size_type _Newsize);
      
      void resize(size_type _Newsize, Type val);//为deque指定大小
      
  • sizesizesize 函数

    • size_type size() const; //返回deque中的元素数量 
      
  • swapswapswap 函数

    • void swap(deque<Type, Allocator>& right); //直接交换两个队列
      

更多推荐