
STL
ZWE7616175
这个作者很懒,什么都没留下…
展开
-
STL六大组件简介
STL中的六大组件包括:容器、容器适配器、算法、迭代器、仿函数、空间配置器。 下面我们总解容器这个组件。 1.vector优点是访问元素效率高,因为是连续空间,所以内存使用率高,缓存使用率也高。缺点是中间位置插入和删除不方便,效率低。2.list优点是中间位置进行插入、删除方便,但访问效率不高。缺点是随机访问的效率低,需要遍历O(N)的时间复杂度。3.双端队列的原理...原创 2018-05-09 23:25:49 · 992 阅读 · 0 评论 -
STL中一级、二级空间配置器原理分析及实现
考虑到一些容器,如vector、list,会存在一些问题:(1)效率低。动态在堆上开辟一块空间,需要在堆上找合适的内存块。 (2)存在内存碎片。导致需要一块较大的空间时,需要在堆上找合适的内存块找不到。 (3)开销太大。为了管理malloc的空闲空间,每一个独立块的最前面都包含了一个“头部信息”,属于额外开销。 (4)存在内存泄露。 (5)代码复用率低。每个容器都会使用相同的new一块...原创 2018-06-03 20:32:26 · 1511 阅读 · 0 评论 -
教你使用STL容器之vector
C++语言本身提供了一个序列式容器array,STL另外再提供vector、list、deque、stack、queue、priority_queue等序列式容器。vector的数据安排以及操作方式,与array是很相似的,唯一的不同点在于空间的运用的灵活性,array是静态的,一旦配置了就不能再改变了,而vector是动态开辟空间的,随着元素的不断加入,内部机制会自行进行扩充来容纳元素。如果...原创 2018-08-13 10:54:32 · 413 阅读 · 0 评论 -
教你使用STL容器之list
相较于vector的连续线性空间,list就稍微有点复杂,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。list对于空间的运用有绝对的精准,一点也不浪费,而且对于任何位置元素的插入和删除,list时间复杂度为O(1)。list底层是一个带头结点的双向循环链表。list的插入和删除操作都不会造成原有的list的迭代器失效,但在vector中,vector的插入操作可能导致原有的迭代...原创 2018-08-13 11:52:40 · 261 阅读 · 0 评论 -
教你使用STL容器之map
map是一种容器,用来存储若干元素这些元素都是键值对(key_value)组成。在一个map中,key值通常用来排序或特指元素,映射值用来存储于该key值绑定的内容。key与value类型可以不同。map中的映射值可以用[ ]来直接访问,底层是用二叉搜索树中的红黑树实现的。在map内部的元素通常按照其key值排序,且排序方式是根据某种明确、严格的弱排序标准进行的,这种排序标准是由map内部的比...原创 2018-08-13 17:59:10 · 238 阅读 · 0 评论 -
STL中迭代器失效问题
迭代器失效有两个层面的意思无法通过迭代器++,–操作遍历整个stl容器。记作: 第一层失效。无法通过迭代器存取迭代器所指向的内存。 记作: 第二层失效。造成失效的两个函数 insert(i, value) 在迭代器i前插入一个元素value, 返回指向value迭代器 erase(i) 删除迭代器i位置的元素, 返回指向后一个元素的迭代器 对...原创 2018-08-19 13:22:27 · 455 阅读 · 0 评论 -
教你使用STL之string
字符串是程序设计中最复杂的内容之一。STL string类提供了强大的功能,使得许多繁琐的编程内容用简单的语句就可以完成。string字符串减少了C语言编程中常见的破坏性错误:* 超越数组边界;* 用野指针来访问字符串;* 释放某一数组原先所分配的存储单元后仍保留了“悬挂指针”。1.包含头文件#include <string>2.string声明及初始化...原创 2018-08-23 19:02:01 · 343 阅读 · 0 评论