C++ 头文件系列(forward_list)】的更多相关文章

简介 forwrad_list字面意思为前向列表,但实际上它是一种单向列表,只能从单一方向遍历. 单向链表实现 forward_list内部是用单向列表实现的,并且设计该库的时候就是以近乎手写的单向链表的运行效率(时间上和空间上)为目的的. 这导致了它是唯一一个C++标准库容器中没有size成员函数的容器, 因为维护这样一个信息会造成效率上的轻微损失. 作为单向链表,它有以下几个属性: 潜在可能的非连续内存分配 线性时间的元素位置获取 常数时间的元素插入.删除.移动 与list的共性 因为它们的…
注意,该头文件仅在C++11中标准才开始出现. 简介 与语言内置的数组一样, array类模版支持几乎所有内置数组包含的特性: 顺序的(sequence) 内存连续的(contiguous storage) 固定大小的(fixed-size) 那既然与内置数组一样,为什么还要定义这样一个模版呢?C++委员会是想造轮子吗(-_-)?当然不是! 为什么需要array? array模版类实际上是内置数组的聚合,外加一层封装.正是由于这层接口,才使得数组能与STL接轨,真正成为一个container.…
简介 这个头文件定义了两个跟队列有关的类----quque.priority_queue,分别实现的是队列 和 优先队列这两个概念. 但是与这两个类模版与其它类模版(vector.array等)最大的不同是,它们是 容器适配器. 容器适配器 顾名思义,容器适配器是对容器的适配,从代码层面来讲,它就是对容器的再封装. 因此,这些容器适配器实际上都是由其他容器的功能实现的. 不难看出, 容器适配器所具有的功能是内部容器功能的子集. 普通的类封装一般是为了封装成特定问题领域下的类,提供特定的接口,以解…
简介 该头文件只含有一个类模版stack, 它实现栈的概念,是一个容器适配器(说实话,在写这篇随笔之前我都不知道有这么个类模版). 栈 栈只有一个重要的特性: LIFO(last-in first-out): 后入栈的元素先出栈. 栈有两个典型的操作----入栈和出栈,一般来说我们认为这两个操作都发生在栈的顶端(top). 操作对应的函数 入栈 -> push 出栈 -> pop (没错,这个头文件的内容确实少)…
简介 vector头文件包含vector的类模版以及该模版的显示特化版本vector< bool >. vector是C++容器库中非常通用的一种容器,如果你不知道该决定使用哪一种容器,或者没有足够的理由使用其它容器,那么就用它,没错的! 从整体上来看,vector就像是一种动态数组,它拥有数组的所有功能并且能够动态增长. 它主要有以下性质: 序列性容器 动态增长 可定制的内存分配策略 内存分配器 如果在一些特殊的应用场景中,默认的内存分配策略拉低了运行效率,这时候自定义的内存分配其就会站出来…
简介 该头文件包含两个概念相似的容器----map.multimap. 而这两个容器反映的概念就是 映射. 这两个容器 相同 的属性有: 关联性 映射 动态增长 键(Key)唯一性 这两个不相同的属性是: 映射关系 容器类别 既然说到关联性容器,自然得说说标准库的容器类别. C++库容器主要能分成以下几类: 序列性容器: 将存储对象组织成线性模型,使用户能够像线性数组那样存取. 关联性容器: 将存储内容以键(Key)相关联 ,通过键来存取内容. 乱序容器: 存储对象以乱序存储,不具有顺序. 容器…
简介 很明显,这两个头文件分别是map.set头文件对应的unordered版本. 所以它们有一个重要的性质就是: 乱序 如何乱序 这个unorder暗示着,这两个头文件中类的底层实现----Hash. 也是因为如此,你才可以在声明这些unordered模版类的时候,传入一个自定义的哈希函数,准确的说是哈希函数子(hash function object). 具有相同相同哈希值的元素被放在同一个桶(bucket)中. 为何乱序 在提供映射.集合功能的情况下,侧重于元素的快速获取. 用树结构(红黑…
简介 该头文件围绕迭代器展开,定义了一系列与迭代器有关的概念,但最最最重要的一点就是----它和其它容器一起实现了C++容器的Iterator设计模式. Iterators are a generalization of pointers that allow a C++ program to work with different data structures(containers) in a uniform manner. 上述文字摘自C++14标准草案,简而言之,迭代器就是对指针的一层封…
简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何数据结构都能使用这套算法库,只要它具有相应的迭代器类型. 算法类别 如上图所示,库中的算法主要分为4类: 非修改性顺序操作(Non-modifying sequence operations) 可变顺序操作(Mutating sequence operations) 排序和关系操作(Sorting…
简介 该头文件有关位集,实际上是vector 位 位本质上对应bool的概念,只有0或1,true或false两种对立的值. 但很可惜,字节才是机器上最小的存储单元,所以bool基本上是由一个字节大小. bitset是出于高效的空间利用为目的才出现的. 位操作 operator [] : 通过下标访问bit. count : 计数位值为1的位个数. size : 返回位的大小,即有多少个位. test : 测试下标指向的位值是否为1. any : 判断是否有任何一个位值为1. none : 判断…