STL之deque容器(笔记)
2007-02-26 11:54
381 查看
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;
函数:
[align=center][/align]
[align=center][/align]
[align=left]与vector很像,但没有capacity()与reserve()因为deque在内部存储的不同,在分配内存的时候deque是大块的临近分配,而vector是线性增长的。所以当你频繁分配内存的时候deque收回内存消耗的时间比较多。[/align]
[align=left][/align]
[align=left][/align]
比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元素互换。 同上操作。 |
[align=center][/align]
[align=left]与vector很像,但没有capacity()与reserve()因为deque在内部存储的不同,在分配内存的时候deque是大块的临近分配,而vector是线性增长的。所以当你频繁分配内存的时候deque收回内存消耗的时间比较多。[/align]
[align=left][/align]
[align=left][/align]
相关文章推荐
- STL学习笔记之 (三)容器 deque
- C++ STL学习笔记三 deque双端队列容器
- STL-学习笔记:顺序容器之deque
- STL学习笔记— —容器deque
- C++ STL学习笔记三 deque双端队列容器
- STL学习笔记----3.容器 vector 和 deque
- STL学习笔记——序列式容器deque
- STL 笔记(一) 顺序容器 vector、list、deque常用函数
- STL 笔记(一) 顺序容器 vector、list、deque
- STL学习笔记之容器--deque(一)
- STL源码笔记(12)—序列式容器之deque(二)
- STL学习笔记----3.容器 vector 和 deque
- STL学习笔记之 (五)容器 vector deque list 使用条件
- STL序列容器vector、deque、list和array学习笔记
- STL学习笔记之容器--deque(二)源码剖析
- STL学习笔记-deque容器(双端动态数组)
- STL笔记(3)-deque,queue,stack,list容器
- STL源码笔记(11)—序列式容器之deque(一)
- STL提供了三个最基本的容器:vector,list,deque
- STL学习笔记--序列式容器