杂谈(1)

一,           c++标准库包括:c标准的C++版本,c++ IO库,C++ STL。

所谓库就是前人已经编好的头文件以及相应编译后的二进制文件,用的时候不用自己写了,直接#include头文件,并用#paragm comment告诉编译器链接时候将该头文件中声明的函数链接进来,但真正编码时候我们很少用这个#paragm comment ,那是因为编程环境已经给我们配置好了。除非自己编写的,这时候要用到这个命令。

IO库最常用的头文件是<iostream>,头文件。非标准的也可以使用<iostream.h>

STL包括了很多容器类(vector,list,deque,stack),还有functional,algorithm,iterator等等。使用时候必须加using namespace std,应为STL当初实现的时候就是把这些文件放到了一个std命名空间里了,所以STL叫标准模板库,没有非标准的此类文件。

C标准库的C++版本:设原来头文件是<*.h>文件,则在c++标准头文件是<c*>。非标准的也可以用,即<*.h>;c++兼容c文件

C++98 STD版本的标准库头文件一概没有.h后缀,并且把几乎所有的内容都加入了namespace std;用的时候要using namespace std;才能使用。

现在官方明确表示不再支持非标准头文件,也就是说,只支持C++98 STD的。但目前非标准的还是可以用,建议不再使用。

二、#include "iostream"与#include<iostream>的区别:前者先在当前目录找iostream文件,找不到再去系统头文件路径找,后者反之。因此,做为一个良好的习惯,在包含系统头文件时尽量用<>,而在包含自己的工程中的头文件时用""。
三、c++支持随用随定义。在for语句中定义的变量,变量的生存期到for结束。for(int i=0;i<m;i++);for(int i=0;i<n;i++);在理论上是正确而的,但在VC++编译时候,告诉我i redefinition。用Gcc果断没有问题。只能说明是VC++的编译器太苦逼,不太标准。查阅得知,当遇到}时候,生存期结束。{ for(int i=0;i<m;i++);} for(int i=0;i<n;i++);ok了。

 四,memset用法,头文件在c中是string.h。在C++是cstring(当然string.h也可以)。Memset函数是按字节进行set data。函数原型是void memset(viod *p, int ,size_t);size_t是字节数

当对char类型数组,使用这个函数时候,可以memset。如 char str[n]; memset(str,数值p,n),这样就str里面的数组全部变成数值p;

但对其他非字节数组时,就会发生我们不期望得到的结果,下面以int为例:

Int A[n],使用metset(A,数值p,n*sizeof(int))时;由于int是32为,所以8位变成p,32为是一个整形。将是什么,大家可以编程实现以下。对int只能当p=0或-1时候,结果才对,因为0和-1的补码分别是0和全1.

posted @ 2014-12-10 13:06  薛小黑  阅读(151)  评论(0编辑  收藏  举报