从C到C++ C++框架
1.1 从C到C++
1.2 C++框架
C++"a+b"程序
1 #include<cstdio> 2 int main() 3 { 4 int a,b; 5 while(scanf("%d%d",&a,&b) == 2 ) printf("%d\n",a+b); 6 return 0; 7 }
唯一的区别是stdio.h变成了cstdio,事实上,stdio.h仍然存在,但是C++中推荐的头文件是cstdio。
类推 string.h变成了cstring math.h变成了cmath ctype.h变成了cctype
下面是一个展示更多常用C++特性的程序
#include<iostream> #include<algorithm> using namespace std; const int maxn =100+10; int A[maxn]; int main() { long long a,b; while(cin >> a >>b) { cout << min(a,b) <<"\n"; } return 0; }
这次使用了两个C++特有的头文件,iostream提供了输入输出流,algorithm提供了一些常用算法。
cin>>a的含义是从标注输入中读取a,返回值是一个“已经读取了a的新流”,然后从这个新流中继续读取b。如果流已经读完,while循环将退出。C++流的优势在于不用记忆%s。%d等占位符,同时避开了“long long类型的输入输出的占位符不统一”问题。缺点是运行太慢。
PS:流也可以加速,方法是关闭和stdio同步,即调用ios::sync_with_stdio(false) ?
using namespace std C++中有一个“名称空间”(namespace)的概念,用来缓解复杂程序的组织问题。例如张三写了一个函数叫 my_good_function ,李四也写这样一个函数,但作用和张三不同。如果有一天需要把他们的程序合在一起用,就会出问题:函数不能重名 (后面会讲到C++支持函数重载,但如果两个函数的参数类型也完全相同,则是不能重载的)。一个解决方案是分别把函数写在各自的 namespace 里,这样就可以用 zhang3:my_good_function() 和 li4:my_good_function() 这样的方式进行调用。
基于这样的考虑,头文件 iostream 和 algorithm 定义的内容放在 std namespace 里。如果代码和该名称 namespace 里的内容不重名,就可以用 using namespace std 的方法把 std 里的名字导入默认空间 (在工程上不推荐这样做) 。这样就可以用 cin 代替 std::cin, cout 代替 std::cout, min 代替 std::min 了。读者可自行测试。
const 声名数组时,数组大小可以使用 const 声明的常数(这在C99中是不孕的)。在C++中更推荐使用这种写法,而不是用 #define 声明常数。
By the wat, C++中的数据类型和C语言很接近,最显著的区别是多了一个 bool 来表示布尔值,然后用 true 和 false 分别表示真和假。虽然仍然可以使用 int 来表示真假,但是用 bool 可以让程序更清晰。