C++ STL中顺序容器类型以及实现原理
2014-10-05 15:45
323 查看
1.顺序容器类型
2.容器元素类型约束必须满足两个约束:
2.1 元素类型必须支持复制操作
2.2 元素类型必须支持赋值操作
3.vector
内存是连续分配的,支持随机访问,capacity函数是指容器的容量,size函数是指容器中元素的个数,当size == capacity 时,如果再向容器中插入新元素,则容器会自动分配一个更大的连续内存,然后把原来的数据复制到新的连续内存,这样保证了内存的连续性。其中容器支持程序员进行内存管理, reserve函数可以设置容器初始容量,和数组下表类似。
显然容器能支持随机访问,但是元素的插入和删除需要线性时间(除非插入到最后一个元素)。
当有元素或删除插入时,插入元素位置及插入元素之后的元素的迭代器将失效(保证内存连续性,后面元素前移)。若因为插入元素大于容量导致重新分配内存,则所有元素的迭代器失效。
4.list
list的实质是双向环形链表,不支持随机访问,顾内存不一定连续,但是list的插入与删除元素的时间复杂度都是O(1),并且除了删除的当前元素的迭代器会失效,其他元素迭代器不会失效。
5.deque
双端队列,支持随机访问,所需时间为常亮。内存分配是一块,一块的,将每一块连接起来,在开头和末端增加,删除元素效率与元素个数无关,内存自动管理。
6.stack
适配器,由deque实现。不能遍历所有元素,只能后进先出。
7.queue
适配器,由deque实现。不能遍历所有元素,只能先进先出。
8.priority_queue
适配器,由vector实现。不能遍历所有元素,只能访问优先级最高的第一个元素。
vector | 支持随机访问 |
list | 支持快速插入与删除 |
deque | 双端队列 |
stack | 后进先出(LIFO) |
queue | 先进先出(FIFO) |
prority_queue | 优先队列 |
2.1 元素类型必须支持复制操作
2.2 元素类型必须支持赋值操作
3.vector
内存是连续分配的,支持随机访问,capacity函数是指容器的容量,size函数是指容器中元素的个数,当size == capacity 时,如果再向容器中插入新元素,则容器会自动分配一个更大的连续内存,然后把原来的数据复制到新的连续内存,这样保证了内存的连续性。其中容器支持程序员进行内存管理, reserve函数可以设置容器初始容量,和数组下表类似。
显然容器能支持随机访问,但是元素的插入和删除需要线性时间(除非插入到最后一个元素)。
当有元素或删除插入时,插入元素位置及插入元素之后的元素的迭代器将失效(保证内存连续性,后面元素前移)。若因为插入元素大于容量导致重新分配内存,则所有元素的迭代器失效。
4.list
list的实质是双向环形链表,不支持随机访问,顾内存不一定连续,但是list的插入与删除元素的时间复杂度都是O(1),并且除了删除的当前元素的迭代器会失效,其他元素迭代器不会失效。
5.deque
双端队列,支持随机访问,所需时间为常亮。内存分配是一块,一块的,将每一块连接起来,在开头和末端增加,删除元素效率与元素个数无关,内存自动管理。
6.stack
适配器,由deque实现。不能遍历所有元素,只能后进先出。
7.queue
适配器,由deque实现。不能遍历所有元素,只能先进先出。
8.priority_queue
适配器,由vector实现。不能遍历所有元素,只能访问优先级最高的第一个元素。
相关文章推荐
- Sphinx API类型以及SphinxSE实现原理分析
- sturts2拦截器执行顺序理解以及拦截器机制实现原理
- 通过AEC解读WF的核心原理(五)实现一个从下向上执行的顺序容器
- Cubby的plugin的实现原理以及执行顺序分析
- Spring学习06--IOC实现原理以及IOC容器初始化过程
- Spring2.0中新的Bean类型实现原理
- Spring2.0中新的Bean类型实现原理
- IronPython for ASP.NET 的原理分析(一):如何在 CLR 类型上实现动态性
- IronPython for ASP.NET 的原理分析(一):如何在 CLR 类型上实现动态性
- 在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载)
- Spring2.0中新的Bean类型实现原理
- 抽象容器类型中的顺序容器
- 动网论坛上传文件漏洞的原理以及攻击的代码实现
- Spring2.0中新的Bean类型实现原理
- Spring2.0中新的Bean类型实现原理
- Spring2.0中新的Bean类型实现原理
- Spring2.0中新的Bean类型实现原理
- Net内存程序集通用脱壳机实现原理(二、反射以及重建方法头)
- 动网论坛上传文件漏洞的原理以及攻击的代码实现
- TCP/IP原理、基础以及在Linux上的实现