deque容器所控制的长度为N 的序列是以统一的长度为B的块组成的,也就是说他跟向量一样支持常量时间内存取任意元素,他与vector是唯一可以随机存取的容器。
比vector好的地方是它可以在容器的头部以常量的时间插入或删除元素,因为它的有效元素是从一个偏移量OFF开始的。但通常下每个元素多一个指针的存储空间,虽然可以任意存取元素,但它需要的时间是线性的,向量是常量
它可以像列表一样实现先进先出或是后进先出,但当我们频繁的在任意位置插入新元素时就没有列表好了。
所以双队列是一个列表与向量之间的折中,推荐先考虑vector与list。
typedef deque<T,allocator <T>> mycont;
构造函数:
deque() 声明一个空的双队列;
deque(al) 声明一个空的双队列,但它还存储一个分配器对象;
deque(n) 声明一个有N个元素的双队列,每个元素的值由默认构造函数T()得来的;
deque(n,val) 声明一个N个元素的双对列,每个元素的值由构造函数T(val)的来的;
deque(n,val,al) 声明一个跟上面一样的双队列,但它还存储一个分配器al;
deque(first,last) 声明一个双队列,元素的初始值由区间指定;
deque(first,last,al) 与上面相同,但它还存储一个分配器对象al;
函数:
函数描述c.assign(beg,end)c.assign(n,elem) 将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。c.back() 传回最后一个数据,不检查这个数据是否存在。c.begin() 传回迭代器重的可一个数据。c.clear() 移除容器中所有数据。operator[]返回容器中指定位置的一个引用c.empty() 判断容器是否为空。c.end() 指向迭代器中的最后一个数据地址。c.erase(pos)c.erase(beg,end) 删除pos位置的数据,传回下一个数据的位置。删除[beg,end)区间的数据,传回下一个数据的位置。c.front() 传回地一个数据。get_allocator 使用构造函数返回一个拷贝。c.insert(pos,elem) c.insert(pos,n,elem)c.insert(pos,beg,end)在pos位置插入一个elem拷贝,传回新数据位置。在pos位置插入>n个elem数据。无返回值。在pos位置插入在[beg,end)区间的数据。无返回值。c.max_size() 返回容器中最大数据的数量。c.pop_back() 删除最后一个数据。c.pop_front() 删除头部数据。c.push_back(elem) 在尾部加入一个数据。c.push_front(elem) 在头部插入一个数据。c.rbegin() 传回一个逆向队列的第一个数据。c.rend() 传回一个逆向队列的最后一个数据的下一个位置。c.resize(num) 重新指定队列的长度。c.size() 返回容器中实际数据的个数。C1.swap(c2) Swap(c1,c2)将c1和c2元素互换。同上操作。 与vector很像,但没有capacity()与reserve()因为deque在内部存储的不同,在分配内存的时候deque是大块的临近分配,而vector是线性增长的。所以当你频繁分配内存的时候deque收回内存消耗的时间比较多。
