历史
1980 年,美国 AT&T 公司贝尔实验室的 Bjarne Stioustrup 博士为了仿真课题研究,编写了称为「带类的 C」语言版本。1983 年 7 月用 C++ 将该语言名字定下来,并对外公开发表。
C++ 语言支持几乎所有的面向对象程序设计特征,具备开发领域的新思想和新技术主要包括: (1)抽象数据类型; (2)封装和信息隐藏; (3)以继承和派生方式实现程序的重用; (4)以运算符重载和虚函数来实现多态性; (5)以模板来实现类型的参数化。
C++ 语言中共有 5 种词法符号:标识符、关键字、常量、运算符和分隔符。
C++ 语言的字符集包括如下内容。 (1)英文字母:A~Z,a~z。 (2)数字字符:0~9。 (3)特殊字符:空格、!、#、%、^、&、*、_(下划线)、+、-、=、~、<、>、/、\、'、"、;、.、,、( )、[]、{}、∶。
关键字
| alignas | alignof | asm | auto | bool | |
| break | case | catch | char | char16_t | |
| char32_t | class | const | const_cast | constexpr | |
| continue | decltype | default | delete | do | |
| double | dynamic_cast | else | enum | explicit | |
| export | extern | false | float | for | |
| friend | goto | if | inline | ||
| int | long | mutable | namespace | new | |
| noexcept | nodiscard | nullptr | operator | private | |
| protected | public | register | reinterpret_cast | return | |
| short | signed | sizeof | static | static_assert | |
| static_cast | struct | switch | template | this | |
| thread_local | throw | true | try | typedef | |
| typeid | typename | union | unsigned | using | |
| virtual | void | volatile | wchar_t | while |
保留字
运算符优先级
| 优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
|---|---|---|---|---|---|
| 1 | :: | 作用域解析 | 5 | 从左到右 | 5 |
| 2 | (表达式) | 分组 | 5 | 从左到右 | 5 |
| () | 函数调用 | 5 | 从左到右 | 5 | |
| () | 值构造 | 5 | 从左到右 | 5 | |
| [] | 数组下标访问操作符 | 5 | 从左到右 | 5 | |
| . | 直接成员选择(对象) | 5 | 从左到右 | 5 | |
| -> | 间接成员选择(指针) | 5 | 从左到右 | 5 | |
| const_cast | 专用类型转换 | 5 | 从左到右 | 5 | |
| dynamic_cast | 专用类型转换 | 5 | 从左到右 | 5 | |
| reinterpret_cast | 专用类型转换 | 5 | 从左到右 | 5 | |
| static_cast | 专用类型转换 | 5 | 从左到右 | 5 | |
| typeid | 类型标识 | 5 | 从左到右 | 5 | |
| ++ | 后缀自增 | 5 | 从左到右 | 5 | |
| -- | 后缀自减 | 5 | 从左到右 | 5 | |
| - | 负号运算符 | 5 | 从右到左 | 5 | |
| ! | 逻辑非运算符 | 5 | 从右到左 | 5 | |
| ~ | 按位取反运算符 | 5 | 从右到左 | 5 | |
| + | 自增运算符 | 5 | 从右到左 | 5 | |
| - | 自减运算符 | 5 | 从右到左 | 5 | |
| ++ | 前缀自增 | 5 | 从右到左 | 5 | |
| -- | 前缀自减 | 5 | 从右到左 | 5 | |
| * | 取值运算符 | 5 | 从右到左 | 5 | |
| & | 取地址运算符 | 5 | 从右到左 | 5 | |
| (type) | 强制类型转换 | 5 | 从右到左 | 5 | |
| sizeof | 长度运算符 | 5 | 从右到左 | 5 | |
| new,new[] | 动态分配内存/数组 | 5 | 从右到左 | 5 | |
| delete,delete[] | 动态释放内存/数组 | 5 | 从右到左 | 5 | |
| 4 | .* | 直接成员解除引用 | 5 | 从左到右 | 5 |
| ->* | 间接成员解除引用 | 5 | 从左到右 | 5 | |
| 5 | * | 乘 | 5 | 从左到右 | 5 |
| / | 除 | 5 | 从左到右 | 5 | |
| 模(余数) | 5 | 从左到右 | 5 | ||
| % | 余数(取模) | 5 | 从左到右 | 5 | |
| 6 | + | 加 | 5 | 从左到右 | 5 |
| - | 减 | 5 | 从左到右 | 5 | |
| 7 | << | 左移 | 5 | 从左到右 | 5 |
| >> | 右移 | 5 | 从左到右 | 5 | |
| 8 | 大于 | 5 | 从左到右 | 5 | |
| < | 大于等于 | 5 | 从左到右 | 5 | |
| >= | 小于 | 5 | 从左到右 | 5 | |
| <= | 小于等于 | 5 | 从左到右 | 5 | |
| 9 | == | 等于 | 5 | 从左到右 | 5 |
| != | 不等于 | 5 | 从左到右 | 5 | |
| 10 | & | 按位与 | 5 | 从左到右 | 5 |
| 11 | 按位异或 | 5 | 从左到右 | 5 | |
| 12 | | | 按位或 | 5 | 从左到右 | 5 |
| 13 | && | 逻辑与 | 5 | 从左到右 | 5 |
| 14 | | | | 逻辑或 | 5 | 从左到右 | 5 |
| 15 | :? | 条件运算符 | 5 | 从右到左 | 5 |
| 16 | = | 赋值运算符 | 5 | 从右到左 | 5 |
| /= | 除后赋值 | 5 | 从左到右 | 5 | |
| *= | 乘后赋值 | 5 | 从左到右 | 5 | |
| %= | 取模后赋值 | 5 | 从左到右 | 5 | |
| += | 加后赋值 | 5 | 从左到右 | 5 | |
| -= | 减后赋值 | 5 | 从左到右 | 5 | |
| <<= | 左移后赋值 | 5 | 从左到右 | 5 | |
| >>= | 右移后赋值 | 5 | 从左到右 | 5 | |
| &= | 按位与后赋值 | 5 | 从左到右 | 5 | |
| ^= | 按位异或后赋值 | 5 | 从左到右 | 5 | |
| |= | 按位或后赋值 | 5 | 从左到右 | 5 | |
| 17 | throw | 抛出异常 | 5 | 从左到右 | 5 |
| 18 | , | 表达式合并 | 5 | 从左到右 | 5 |
运算符重载
编译器通过上下文确定运算符的不通含义
数据类型
数组
float loans [20] ;
字符串
char cat[8] = {'f','a','t','e','s','s','a','\0'} ;
string str1 = {"this is string"};
结构
struct inflatable {
char name [20] ;
float volume ;
double price ;
}
inflatable guest = {
"Clorious Gloria",
1.88,
29.99
} ;
共用体
union id {
long id_num;
char id_char[20];
}
枚举
enum bits { one = 1 , two = 2 ,four = 4 , eight = 8 };
指针
int * p_updates;
模版类
vector <double> vt (n_elem)
表达式
表达式是由运算符和各种运算对象(常数、变量、常量等,也称为操作数)组合而成的。
C++ 程序中的表达式与我们在数学中用到的表达式类似,都是用于计算的式子,所有的表达式都要有一个运算结果。
C++ 语言中常见的表达式有算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式、赋值表达式等。
1.算术表达式 2.关系表达式 3.逻辑表达式 4.赋值表达式 5.条件表达式 6.逗号表达式
语句
语句是表达算法命令或编译指示的基本语言单位,可用于计算表达式的值,控制程序执行的顺序。
在 C++ 语言中,把常量、变量、运算符、表达式等按一定的语法规则进行组合,以分号结束就可构成各种语句。
C++ 语言提供了丰富的语句,可分为表达式语句、复合语句、控制语句、空语句等。
1.预编译
在 C++ 系统中,预处理程序是在编译器翻译阶段开始之前自动执行的。 C++ 预处理程序完成时「预处理指令」的处理。预处理指令表示程序编译之前要进行的某些处理操作。 这些处理操作通常包含在要被编译的文件中,如包含其他文件、包含指令及各种文本替换指令等。
2.编译 编辑好的源程序必须经过编译,翻译成计算机能够识别的机器代码,计算机才能执行,这些二进制代码称为目标代码。将这些目标代码以.obj 为扩展名保存在磁盘中,称为目标程序。 编译阶段主要是分析程序的语法结构,检查 C++ 源程序的语法错误。如果分析过程中发现有不符合要求的语法错误,就会及时报告给用户,将错误类型显示在屏幕上。
3.连接 编译后生成的目标代码还不能直接在计算机上运行,其主要原因是编译器会对每个源程序文件分别进行编译,如果一个程序有多个源程序文件,编译后这些源程序文件还分布在不同的地方。因此,需要把它们连接在一起,生成可以在计算机上运行的可执行文件。即使 C++ 源程序只有一个源文件,这个源文件生成的目标程序也需要系统提供的库文件中的一些代码,故也需要连接起来。 连接工作一般由编译系统中的连接程序(又称为连接器)来完成,连接器将目标代码文件和库中的某些文件连接在一起,生成一个可执行文件,默认扩展名为.exe。
C++ 程序的基本框架
一个 C++ 程序可以由一个程序单位或多个程序单位构成。每个程序单位作为一个文件。在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。在一个程序单元中,可以包括以下几个部分。
(1)预处理命令。
以#开头的命令,表示这些命令是预处理命令, C++ 提供了3 类预处理命令: 1 宏定义命令 2 文件包含命令 3 条件编译命令
(2)全局声明部分
(在函数外的声明部分)。在这部分中包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义。
(3)函数。
函数是实现操作的部分,因此函数是程序中必须有的和最基本的组成部分。每一个程序必须包括一个或多个函数,其中必须有一个(而且只能有一个)主函数(main 函数)。
一个函数由两部分组成。 (1)函数首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。一个函数名后面必须跟一对圆括号,括号中的函数参数可以缺省。 如:int max(int x,int y) (2)函数体,即函数首部下面的大括号内的部分。如果在一个函数中有多个大括号,则最外层的一对{}为函数体的范围。 函数体一般包括如下几个部分。 (1)局部声明部分(在函数内的声明部分),包括对本函数中所用到的类型、函数的声明和变量的定义。对数据的声明既可以放在函数之外(其作用范围是全局的),也可以放在函数内(其作用范围是局部的,只在本函数内有效)。 (2)执行部分,由若干个执行语句组成,用来进行有关的操作,以实现函数的功能。 当然,在某些情况下也可以没有声明部分。甚至可以既无声明部分,也无执行部分。如 void demp( ){}它是一个空函数,什么也不干,但这是合法的。 语句包括两类:一类是声明语句,如「int a,b;」,用来向编译系统通知某些信息(如类型、函数和变量的声明或定义),但它并不引起实际的操作,是非执行语句;另一类是执行语句,用来实现用户指定的操作。C++ 对每一种语句赋予一种特定的功能。语句是实现操作的基本成分,显然,没有语句的函数是没有意义的。C++ 语句必须以分号结束,如「c=a+b;」,分号是语句的一个组成部分,注意没有分号的就不是语句。 一个 C++ 程序总是从 main 函数开始执行的,而不论 main 函数在整个程序中的位置如何,main 函数可以放在程序文件的最前头,也可以放在程序文件的最后,或在一些函数之前,在另一些函数之后。 【例 1.1】 C++ 一个最简单的输出语句程序。 //一个最简单的 C++ 程序 #include <iostream.h> void main( ) { cout<<"Welcom to Visual C++.\n"; } 此程序的运行结果是在屏幕上显示: Welcom to Visual C++. 上述程序虽然只有 6 行,但却包含了每一个 C++ 程序都具备的几个基本组成部分。下面详细介绍该程序: 第 1 行是注释语句。该注释语句用来说明整个程序的功能。注释用来对程序进行注解和说明。注释不是程序的有效部分,对程序不起任何作用,但给程序添加合适的注释是一种良好的程序设计风格,注释被视为程序的一个重要组成部分。在 C++ 程序中,注释有两种方式:一是以「//」开头,表示该行的后续部分都是注释;另一种即 C 语言原有的注释方式,以「/」开头,以/结尾,二者之间的所有字符都是注释。 第 2 行语句是一条预处理指令,这不是 C++ 的语句,它以「#」开头与 C++ 语句相区别,行的末尾没有分号。#include<iostream.h> 是一个「包含命令」,它的作用是将文件 iostream 的内容包含到该命令所在的程序文件中,代替该命令行。文件 iostream 的作用是向程序提供输入或输出时所需要的一些信息。iostream 是 i-o-stream 3 个词的组合,它告诉预处理器要在程序中包括「输入输出流」的头文件 iostream.h 内容,「.h」称为「头文件」(head file)。该文件包含了与输入输出流相关的类,类型和函数的说明。如果程序中要使用这些输入输出流功能,必须包括这个文件。在程序进行编译时,先对所有的预处理命令进行处理,将头文件的具体内容代替#include 命令行,然后再对该程序单元进行整体编译。 第 3 行语句是每个 C++ 程序都包含的主函数语句。main 后面的括号表示它是一个函数。C++ 程序由一个或多个函数组成,其中有且只有一个 main 函数。即使 main 不是程序中的第一个函数,C++ 程序都是从函数 main 开始执行的。main 左边的关键字 void 表示函数无返回值。 第 4 行的左花括号{与第 6 行的右花括号}表示函数的开头和结尾。注意 C++ 所有语句最后都应当有一个分号。 第 5 行语句是一个输出语句。cout 是由 c 和 out 两个单词组成,是 C++ 用于输出的语句。cout 实际上是 C++ 系统定义的对象名,称为输出流对象。用 cout 和「<<」实现输出的语句简称为 cout 语句,「<<」是「插入运算符」,与 cout 配合使用,在本例中它的作用是将运算符「<<」右侧双撇号内的字符串「 Welcom to Visual C++」插入输出的队列 cout(输出的队列也称作「输出流」),C++ 系统将输出流 cout 的内容输出到系统指定的设备(通常为显示器)中。 C++ 程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。C++ 程序没有行号,也不像 FORTRAN 或 COBOL 那样严格规定书写格式(语句必须从某一列开始书写)。一个好的、有使用价值、可读性强的源程序都应当加上必要的注释。
(4)类(class)
是 C++ 新增加的重要的数据类型,是 C++ 对 C 的最重要的发展。有了类,就可以实现面向对象程序设计方法中的封装、继承、派生、多态等功能。在一个类中可以包括数据成员和成员函数,它们可以被指定为私有的(private)、公有的(public)属性和保护的(protected)。私有的数据成员和成员函数只能被本类的成员函数所调用。
类是创建对象的模板,类包含着所创建对象的状态描述和定义的方法,一般是先声明类,再由类创建其对象。按照这个模板创建的每个具体实例就是对象。
C++ 语言程序基本结构
1.头文件
在 C++ 程序开始部分出现以#开头的命令,表示这些命令是预处理命令,称为预处理器。C++ 提供了 3 类预处理命令:宏定义命令、文件包含命令和条件编译命令。例 1.1 中出现的「# include」命令是文件包含命令,指示编译器将头文件 iostream 中的代码嵌入程序中该命令所在之处。其中 include 是关键字,尖括号内是被包含的文件名,iostream 是一个头文件,该文件包含程序输入/输出操作所必需的标准输入/输出流对象。 C++ 语言包含头文件的格式有以下两种。 (1)#include< 文件名 > 编译器并不是在用户编写程序的当前目录查找文件,而是在 C++ 系统目录中查找。这种包含方法常用于标准头文件,如 iostream、string 等。 (2)#include「文件名」 编译器首先在用户编写程序的当前目录中查找文件,然后再在 C++ 系统目录中查找。 对于一个存在着标准输入/输出的 C++ 控制台程序,一般会在#include 的下面有一行语句「using namespace std;」,这条语句就是告诉编译器,这行代码之后用到的 cout、cin 等标准输出/输入流对象都是在 std 这个命名空间内定义的,其实就是表示所有的标准库函数都在标准命名空间 std 中进行了定义,其作用就在于避免发生重命名的问题。C++ 语言引入命名空间 namespace,就是为了解决多个程序员在编写同一个项目时,可能出现的函数重名问题,解决方法就是在函数之前加上自己的命名空间。
2.函数
C++ 的程序是由若干个文件组成的,每个文件又由若干个函数组成。函数之间是相互独立的,相互之间可以调用。但函数在调用之前,必须先定义。 函数要先声明后调用,一般用函数原型进行声明。例 1.1 中第 3 行 void sayhello();就是函数原型声明,其作用是告诉编译器,这个函数可以使用,该函数在其他地方已经定义了。 C++ 程序中的函数可分为两大类,一类是用户自己定义的函数,另一类是系统提供的标准函数。使用系统提供的标准函数时,可以直接调用,但需要将该函数的头文件包含在程序中。 例 1.1 中第 12~15 行是 sayhello()函数的定义。一个 C++ 函数中的任何语句都被括在一对花括号「{}」中,这部分内容称作函数体,而函数名 sayhello 和它后面的小括号「()」称为函数头。
3.主函数
在组成 C++ 程序的若干个函数中,必须有且仅有一个主函数 main()。执行程序时,系统先从主函数开始运行,其他函数只能被主函数调用,或通过主函数被其他函数所调用,函数还可以嵌套调用。 例 1.1 中第 4 行定义了一个主函数 main()。它是程序开始执行的地方,即在程序生成可执行文件后,将从此处开始运行程序。主函数可以带参数,也可以不带参数。由{}括起来的内容是主函数 main()的函数体,其中左大括号「{」表示函数的开始,右大括号「}」表示函数的结束。函数体部分由许多 C++ 语句组成,这些语句描述了函数实现的具体功能。
4.注释
程序中的注释只是为了阅读方便,并不增加执行代码的长度,在编译时注释被当作空白行跳过。C++ 语言中的程序注释有以下两种书写格式。 第一种注释方法是以「//」表示注释开始,本行中「//」后面的字符都会被作为注释处理,这种注释方式多用于较短的程序注释。 第二种注释方法是以「/」开始,以「/」结束,二者之间的所有字符都会被作为注释处理,此时的注释可以是一行,也可以是多行,适合于大块的注释。 例 1.1 中的第 7、11 行都是程序的注释部分,其中第 7 行用来说明下面的语句功能是在显示器上输出一行字符串。注释对于较复杂的 C++ 程序是非常必要的,可以解释一行语句或几行语句的作用或功能,提高程序的可读性。 5.输入/输出 输入/输出语句是 C++ 最基本的语句。例如例 1.1 中的语句「cout<<「Hello!」<<endl;」和「cout<<「This is my first C++ program! 」<<endl;」都是输出语句,例 1.1 中没有输入语句。 这里的 cout 是标准输出流对象,实际指定显示器为输出设备;「<<」是 cout 中的运算符,表示把它后面的数据在输出设备上输出显示,双引号表示要显示的内容是一个字符串,最后的 endl 表示回车换行,分号「;」表示语句结束。C++ 规定语句必须要用分号「;」结尾。 cin 是 C++ 语言中的标准输入流对象,就是从键盘输入数据。「>>」是 cin 中的运算符,表示从键盘读入数据存放在它后面的参数中。例如,语句「cin>>a>>b;」表示从键盘输入数据,第一个数据存入 a 中,第二个数据存入 b 中。 综上所述,一个 C++ 程序的基本结构应该包括以「#」开头的若干个预处理命令,将程序所需要的头文件包含进来,然后定义主函数和其他函数,当然函数也可以在程序的起始部分先利用函数原型进行声明,以后再进行定义。用大括号「{}」括起来的部分就是函数体部分,函数体部分主要包括各种语句和注释,这部分是程序的主体部分,所占比重也最大。
5.输入/输出
C++编译环境的组成:
C++标准库:
C++ 标准库可以分为两部分: 使用时要用using namespace std找开命名空间。 标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。 面向对象类库: 这个库是类及其相关函数的集合。 C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。
标准函数库:
标准函数库分为以下几类:
输入/输出 I/O 字符串和字符处理 数学 时间、日期和本地化 动态分配 其他 宽字符函数
面向对象类库:
标准的 C++ 面向对象类库定义了大量支持一些常见操作的类,比如输入/输出 I/O、字符串处理、数值处理。面向对象类库包含以下内容:
标准的 C++ I/O 类 String 类 数值类 STL 容器类 STL 算法 STL 函数对象 STL 迭代器 STL 分配器 本地化库 异常处理类 杂项支持库
(1)C标准函数库
(2)流输入/输出
:支持标准流cin、cout、cerr和clog的输入和输出,还支持多字节字符标准流wcin、wcout、wcerr和wclog。 :提供操纵程序,允许改变流的状态,从而改变输出的格式。 :定义iostream的基类。 :为管理输出流缓存区的输入定义模板类。 :为管理输出流缓存区的输出定义模板类。 :支持字符串的流输入输出。 :支持文件的流输入输出。 :为输入输出对象提供向前的声明。 :支持流输入和输出的缓存。 :为标准流提供C样式的输入和输出。 :支持多字节字符的C样式输入输出。
(3)数值操作
:支持复杂数值的定义和操作。 :支持数值矢量的操作。 :在数值序列上定义一组一般数学操作,例如accumulate和inner_product。 :这是C数学库,其中还附加了重载函数,以支持C++约定。 :提供的函数可以提取整数的绝对值,对整数进行取余数操作。
(4)诊断功能
:定义标准异常。 :定义断言宏,用于运行时检查。 :支持C样式的错误信息。
(5)通用工具
(6)国际化
(7)语言支持功能
:定义宏NULL和offsetof以及其它标准类型size_t和ptrdiff_t。与对应的标准C头文件的区别是,NULL是C++空指针常量的补充定义(C++11中已有关键字nullptr),宏offsetof接受结构或者联合类型参数,只要没有成员指针类型的非静态成员即可。 :提供与基本数据类型相关的定义。例如,对于每个数值数据类型,它定义了可以表示出来的最大值和最小值以及二进制数字的位数。 :提供与基本整数数据类型相关的C样式定义,C++样式定义在中。 :提供与基本浮点型数据类型相关的C样式定义,C++样式定义在中。 :提供支持程序启动和终止的宏和函数,还声明了许多其他杂项函数,例如搜索和排序函数,从字符串转换为数值等函数。与对应的标准C头文件stdlib.h不同,定义了abort(void)。abort()函数还有额外的功能,它不为静态或自动对象调用析构函数,也不调用传给atexit()函数的函数。它还定义了exit()函数的额外功能,可以释放静态对象,以注册的逆序调用用atexit()注册的函数。清除并关闭所有打开的C流,把控制权返回给主机环境。 :支持动态内存分配。 :支持变量在运行期间的类型标识。 :支持异常处理,是处理程序中可能发生的错误的一种方式。 :支持接受数量可变的参数的函数。即在调用函数时,可以给函数传送数量不等的数据项。定义了宏va_arg、va_end、va_start以及va_list类型。 :为C样式的非本地跳跃提供函数,在C++中不常用。 :为中断处理提供C样式支持。
(8)字符串处理
:为字符串类型提供支持和定义,包括单字节字符串(由char组成)的string和多字节字符串(由wchar_t组成)。 :单字节字符类别。 :多字节字符类别。 :为处理非空字节序列和内存块提供函数。不同于对应的标准C库头文件,C样式字符串的一般C库函数被返回值为const和非const的函数对替代。 :为处理、执行I/O和转换多字节字符序列提供函数,不同于对应的标准C库头文件,几个多字节C样式字符串操作的一般C库函数被返回值为const和非const的函数对替代。 :为把单字节字符串转换为数值、在多字节字符和多字节字符串之间转换提供函数。
(9)容器类模板
:定义vector序列模板,是一个大小可以重新设置的数组类型,比普通数组更安全、更灵活。 :定义list序列模板,是一个序列的链表,常常在任意位置插入和删除元素。 :定义deque序列模板,支持在开始和结尾的高效插入和删除操作。 :为队列(先进先出)数据结构定义序列适配器queue和priority_queue。 :为堆栈(后进先出)数据结构定义序列适配器stack。 :map是一个关联容器类型,允许根据键值是唯一的,且按照升序存储。multimap类似于map,但键不是唯一的。 :set是一个关联容器类型,用于以升序方式存储唯一值。multiset类似于set,但是值不必是唯一的。 :为固定长度的位序列定义bitset模板,它可以看作固定长度的紧凑型bool数组。 :(TR1)固定大小数组,支持复制。 <forward_list>:(c++11)单向列表,支持快速随机访问。 <unordered_set>:(TR1)无序容器set,其元素随机存放。multiset类似于set,但是值不必是唯一的。 <unordered_map>:(TR1)无序容器map,其键值随机存放。multimap类似于map,但键不是唯一的。
(10)迭代器
:给迭代器提供定义和支持。
(11)算法
:提供一组基于算法的函数,包括置换、排序、合并和搜索。 :声明C标准库函数bsearch()和qsort(),进行搜索和排序。 :允许在代码中使用and代替&&。
C语言兼容库:
头文件带.h,是C++编译器提供商为推广自己的产品,而提供的C兼容库(不是C++标准库提供的),内置的C库。
编译器扩展库:
这是针对不同的编译器而独有扩展的,例如g++和vc++,它们在这一板块就不同。
C++标准语法模块:
C++标准语法的支持。
C++扩展语法模块:
同样是针对不同的编译器而独有扩展语法。