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元素互换。 同上操作。 |