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

内容概览 一图解百问,但是有些地方我们需要特别指出: 类型在这里指通过typedef重定义的,例如函数类型.指针类型等. exception_ptr 在标准中是未定义具体实现的,因此它可能是类也可能是类型. uncaught_exception() 和 uncaught_exceptions() 是两个不同的函数,分别 判断是否有未处理异常.返回未处理异常的个数 . 其中,uncaught_exceptions()函数仅在C++14开始出现. 仔细观察上图,你就能发现标准库给我们提供了以下几个方…
1 简介 我们都知道,平时常用的那些标准流,诸如iostream.ofstream.ifstream等等,其实都是对应的basic_XXX模版的实例类. 而这些basic_XXX类模版又都是继承自同一个基类模版----basic_ios. 2 basic_ios模版 定义这个基类模版应该是出于可重用的目的. 2.1 成员类型 char_type : 字符类型,即第一个模版参数. char_traits : 萃取器,即第二个模版参数(默认为位于< string >头文件内的char_traits…
1. 简介 其实叫它istream有点不合适,因为该头文件不仅定义了istream,还定义了iostream. 2. basic_istream模版 basic_istream继承自basic_ios,也是其它输入流的基类. 2.1 sentry类 The class sentry defines a class that is responsible for doing exception safe prefix and suffix operations. sentry是哨兵的意思,标准给出…
注意,该头文件仅在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标准草案,简而言之,迭代器就是对指针的一层封…