摘要:
STL提供了很多泛型容器,如vector,list和map。程序员在使用这些容器时只需关心何时往容器内塞对象,而不用关心如何管理内存,需要用多少内存,这些STL容器极大地方便了C++程序的编写。例如可以通过以下语句创建一个vector,它实际上是一个按需增长的动态数组,其每个元素的类型为int整型:stl::vector array;拥有这样一个动态数组后,用户只需要调用push_back方法往里... 阅读全文
摘要:
红黑树是一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树,本质上来说就是一棵二叉查找树,但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为 \(O(log n)\)。红黑树的性质每个节点或者是黑色,或者是红色。根节点是黑色。每个叶子节点(NIL)是黑色。 注意:这里叶... 阅读全文
摘要:
set和multiset会根据特定的排序准则,自动将元素排序。两者不同的之处在于multiset允许元素重复,而set不允许。内部通常以平衡二叉树(也有红黑树)完成自动排序,这样就造成了不能直接更改元素的值,因为这会打乱原来的次序。只要是可依据某排序准则比较的任意类型T都可以成为 \(set\) 或 \(multiset\)构造函数与析构函数 阅读全文
摘要:
\(ForwordList\) 中是一个单向链表,始于C++11。是一个行为受限的 \(List\),不能走回头路,凡是\(List\)没有提供的功能,它都不提供。它的优点是内存量较少,行动也略快速。\(ForwordList\) 与 \(List\)的差异\(ForwordList\) 只提供前向迭代器,而不是双向迭代器。因此它也不支持反向迭代器。\(ForwordList\) 不提供成员函数... 阅读全文
摘要:
相对于vector的连续线性空间,list就显得复杂许多,与向量(vector)相比,它允许快速的插入和删除,且每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。list不仅是一个双向链表,而且还是一个环状双向链表。所以它只需要一个指针,便可以完整实现整个链表。由于list是一... 阅读全文
摘要:
vector是单向开口的连续线性空间,deque则是以中双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。从技术的角度而言,vector当然也可以在头尾两端进行操作,但是其头部操作效率奇差、令人无法接受。deque和vector的最大差异:deque允许于常数时间内对头端进行元素的插入或移除操作deque没有所谓容量(capacity)观念,因为它是动态地以分段... 阅读全文
摘要:
vector模塑出一个动态数组,但是C++标准中并为要求以动态数组来实现vector。
vector是一种有序集合,可以随机访问,提供随机访问迭代器在末端添加或删除元素,vector的效率就非常好;但在前端删除或插入元素的效率就非常低vector优异效率的秘诀就是分配出“较其容纳元素” 的更多内存vector的容量为什么重要vector的容量一旦超过capacity,就需要重新分配内存vect... 阅读全文
摘要:
一个Array也是容器类array的一份实体--模塑出一个static array, 它包覆一个寻常的static c-style array 并提供一个STL容器接口。构造函数Array的注意事项其中的元素是一个有序的集合允许随机访问其迭代器属于随机迭代器其size()的结果总等于N不支持分配器是唯一一个无任何东西被指定为初值时,会被预初始化的容器,这意味着对于基础类型初值可能不明确clas... 阅读全文