知识盲点
1.格式输入和格式输出
例如:2012/11/05 22:05
读入方式: scanf("%d/%d/%d %d:%d",&year,&month,&day,&hour,&minute);函数返回值为5
scanf("%*d/%*d/%*d %d:%d",&hour,&minute);前三个整数没有必要保存, 只读入,函数返回值为2.
2.从字符串中读取数据或者写入数据到字符串
sscanf :从一个缓冲区读取格式化的输入sprintf:写格式化的输入到缓冲区
sscanf(str,"%d",&num); //从字符串中读取数字
3.string .h 中包含的常用函数
memset() strcat() strchr() strcmp() strcpy() strlen()
strncat() strncmp() strncpy() strstr() strtok()
ctype.h
4.文件名如果用尖括号括起来,表面这个文件是一个工程或标准头文件,查找过程会检查预定义的目录。如果文件名是用一对引号括起来,则表面该文件是用户提供的头文件,查找该文件将从当前目录开始。
5.由于嵌套包含文件的原因,一个头文件可能会被多次包含在一个源文件中。条件指示符可以防止头文件的重复处理。
6.文件的输入和输出<fstream>
ofstream outfile("name-of-file"); 为了测试是否成功打开了一个文件,if(!outfile) cerrr<<"sorry";
ifstream infile("name of file"); if(!inlife) cerr<<"sorry,we are unable to open the file";
infile文件读入 outfile文件输出
ifstream cin("aaa.txt");
输入输出重定向:freopen("in.txt","r",stdin) freopen("out.txt","w",stdout);
7.内存泄露(memory leak)
指一块动态分配的内存,我们不再拥有指向这块内存的指针,因此我们没有办法将它返还给程序供以后重新使用。
8.vector 中必须是已存在的元素才能用下标操作符进行索引,通过下标操作符进行复制时,不会添加任何元素。用push_back()添加新元素。
9.bitset对象和string对象之间是反向转化的,bitset用string 来进行初始化的时候,string 对象的最右边字符(即下标最大的那个字符)来初始化bitset对象的低阶位(即下标为0的位)。
例子: string strval("1100"); bitset <32> bitvec4(strval); bitvec4的位模式中第2和3的位置为1,其它位置为0.
10.指针赋值和通过指针进行赋值
如果对左操作数进行解引用,则修改的是指针所指对象的值;如果没有使用解引用操作,则修改的是指针本身的值。
11.指针和引用的区别
(1)引用总是指向某个对象,定义引用时没有初始化是错误的。
(2)给引用赋值修改的是该引用所关联的对象的值,而不是使引用与另一对象关联。引用一经初始化,就始终指向同一个特定对象。(引用必须在定义初始化的原因)
12.在使用下标访问数组的时候,实际上是对指向数组元素的指针做下标操作。只要指针指向了数组元素,就可以对它进行下标操作:p为指针,p[1]=*(p+1)
13.指向const对象的指针和const指针
典型例子:(错误的原因在于将typedef当做文本扩展)
typedef string *pstring; const pstring cstr; cstr变量是指向string类型对象的const指针
14.动态数组
例子:int *a = new int [n]; delete [] a; 如果回收数组的时候缺少空方括号,至少会导致程序在运行的时候少释放了内存空间,从而产生内存泄露(memory leak)。
15.标准库函数strlen返回的是字符串的长度,并不包括字符串结束符,在获得的字符串长度上必须加1以便在动态分配时预留结束符的存储空间。
16.string对象和字符串的转换 s.c_str();返回的是C风格字符串
17.C++中四种强制类型转换 cast-name<type>(expression);cast-name为static_cast dynamic_cast const_cast reinterpret_cast
18.数组的两个特殊的性质:一是不能复制数组;二是在使用数组名时,数组名会自动转化为指向其第一个元素的指针。因为数组不能复制,所以无法编写使用数组类型形参的函数。因为数组会被自动转化为指针,所以处理数组的函数通常通过操纵指向数组中的元素的指针来处理数组。
19.main:处理命令行选项 int main(int argc,char **argv){ }
第一个形参agrc则用于传递该数组中字符串的个数。第二个形参argv是一个C风格字符串数组。由于第二个参数是一个数组,主函数main如上定义。
20.内联函数避免函数调用的开销,一般来说内联机制适用于优化小的、只有几行的而且经常被调用的函数。
21.int const *pi 和 const int *pi const和 int放前和放后都是一样的
const 修饰的是整个*pi,所以*pi是常量,是不能被赋值的。上面pi的值是可以修改的。即它可以重新指向另一个地址的,但是,不能通过*pi来修改。
int *const pi 中const修饰的pi(指针常量),即pi值是不能重新赋值修改了。它只能永远指向初始化时的内存地址。此时可以通过*pi来修改对应的值。
22.函数参数的传递
区别:值传递 地址传递 引用传递
23.最常用的容器类型是vector,它支持对元素的快速随机访问。可以高效地在容器尾部添加和删除元素,在其他任何位置上的插入或删除运算则要效率不高。deque类能够在首部快速插入和删除。list类只支持元素的顺序访问,在任何位置插入或删除元素很快。