STL之deque容器(笔记)

  deque容器所控制的长度为N 的序列是以统一的长度为B的块组成的,也就是说他跟向量一样支持常量时间内存取任意元素,他与vector是唯一可以随机存取的容器。

比vector好的地方是它可以在容器的头部以常量的时间插入或删除元素,因为它的有效元素是从一个偏移量OFF开始的。但通常下每个元素多一个指针的存储空间,虽然可以任意存取元素,但它需要的时间是线性的,向量是常量

它可以像列表一样实现先进先出或是后进先出,但当我们频繁的在任意位置插入新元素时就没有列表好了。

所以双队列是一个列表与向量之间的折中,推荐先考虑vector与list。

typedef deque> 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收回内存消耗的时间比较多。

你可能感兴趣的:(编程相关)