5.1 从C到C++
5.1.1 C++版框架
-
C++能编译大多数C语言程序。虽然C语言中大多数头文件在C++中仍然可以使用,但推荐的方法是在C头文件之前加一个小写的c字母,然后去掉.h后缀。例如stdio.h->cstdio.h,string.h->cstring,math.h->cmath,ctype.h->cctype.
-
C++用输入输出流iostream来解决输入输出问题,避免了C中各种输入输出格式问题,但是最大的缺点是运行太慢。可以通过关闭和stdio的同步,即调用ios::sync_with_stdio(false)来加速。
-
C++通过使用命名空间的问题来缓解复杂程序的组织问题。最常见的是使用using namespace std。例如,有两个不同的人甲和乙写的同一个函数fun()要整合到一个工程中,可以使用std1:fun()和std2:fun()来避免冲突,这和Java中使用全限定名来避免冲突是类似的。
-
C++中声明数组大小时,推荐用const int maxn = 100;这种形式来替代#define maxn 100这种形式。
-
C++的数据类型和C语言很接近,最显著的区别是多了一个bool来表示布尔值,然后用true和false分别表示真和假。
5.1.2 引用
C++提供了引用,虽然在功能上比指针弱,但是减少了出错的可能性,提高了代码的可读性。C++中的引用就是变量的“别名”,它可以在一定程度上代替C中的指针,可以在函数内直接修改实参。
5.1.3 字符串
C++提供了一个新的string类型,用来替代C语言中字符数组。C++在string头文件里定义了string类型,直接支持流式读写。string有很多方便的函数和运算符,但速度有些慢。
5.1.4 再谈结构体
C++中不再需要用typedef的方式定义一个struct,而且在struct里除了可以用变量(称为成员变量)之外还可以有函数(称为成员函数)。注意在工程上和算法竞赛中使用struct和class的区别,算法竞赛中一般用struct。
5.1.5 模板
虽然模板在工程中的应用范围很广,而且功能十分强大,但在算法竞赛中用的比较少。