C++ Primer Plus——常用操作清单

常用的头文件及其函数:

iostream(在老式实现中为iostream.h)

cout是一个ostream对象

1.P48 ostream方法setf()这种调用迫使输出使用定点表示法,以便更好地了解精度,它防止程序把较大的值切换为E表示法,并使程序显示到小数点后6位。参数ios_base::fixed 和ios_base::floatfield是通过包含iostream来提供的常量。 

        通常cout会删除结尾的零。例如,将3333333.250000显示为3333333.25。调用cout.setf()将覆盖这种行为,至少在新的实现中是这样的。

         cout.setf(ios_base::fixed, ios_base::floatfield);

2.P108 ostream方法setf()。cout在显示bool值之前将它们转换为int,但cout.setf(ios::boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0;。

3.P159 cout << fixed; cout.precision(x); cout.setf(ios_base::showpoint)

        将以固定x位小数的方式显示浮点数

cin是一个istream对象

1.P65 istream中的类(如cin)提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符,然而getline()将丢弃换行符,而get()将换行符保留在输入序列中。

             混合输入数字和面向行的字符串会导致问题,采取措施避免(由于不能通过键盘输入空字符,因此cin需要用别的方法来确定字符串的结尾位置。cin使用空白(空格、制表符和换行符)来确定字符串的结束为止,这意味着cin在获取字符数组输入时只读取一个单词。读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符,cin不读取由回车键生成的换行符并将其保留在了输入队列中)

        getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。要调用这种方法,可以使用cin.getline()。该函数有两个参数。第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数。如果这个参数为20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符。getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。

        get()函数有几种变体。其中一种变体的工作方式与getline()类似,它们接受的参数相同,解释参数的方式也相同,并且读取到行尾。但get并不再读取并丢弃换行符,而是将其留在输入队列中。假设我们连续两次调用get():

        cin.get(name, ArSize);

        cin.get(dessert, ArSize);

        由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因为get()认为已到达行尾,而没有发现任何可读取的内容。如果不借助于帮助,get()将不能跨国该换行符。

        幸运的是,get()有另一种变体。使用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符),因此可以用它来处理换行符,为读取下一行输入做好准备,可以采用下面的调用序列:

        cin.get(name, ArSize);

        cin.get();

        cin.get(dessert, ArSize);

2.P72 getline()函数(将行输入读取到string对象的函数),并不使用句点表示法,这表明这个getline()不是类方法。它将cin作为参数,指出到哪里去查找输入,另外,也没有指出字符串长度的参数,因为string对象将根据字符串的长度自动调整自己的大小。

3.P126 cin.get(char)函数用于逐个字符读取输入的程序需要检查每个字符,包括空格、制表符和换行符。cin所属的istream类(在iostream中定义)中包含一个能够满足这种要求的成员函数。具体地说,成员函数cin.get(char)读取输入中的下一个字符(即使它是空格),并将其赋给变量char。使用这个函数调用替换cin>>char,即可修补程序无法读取空格、制表符和换行符的问题。

4.P151 cin.clear()类成员函数用于充值错误输入标记,同时也重置文件尾(EOF条件)。输入错误和EOF都将导致cin返回false。

        首先重置cin以接受新的输入,再删除错

误输入(while(cin.get() != '\n');)两步一步也不能少

cmath(在老式实现中为math.h)

1.P24 sqrt()平方根函数

2.P191 atan2()函数可根据x和y的值计算角度。

3.P191 atan()函数可根据x和y的值计算角度,但不能区分180度之内和之外的角度。

climits(在老式实现中为limits.h)中包含了关于整型限制的信息。具体地说,它定义了表示各种限制的符号名称。例如,INT_MAX为int的最大取值,CHAR_BIT为字节的位数。

cstring(在老式实现中为string.h)对于C风格字符串,程序员使用C语言库中的函数来完成这些任务

1.P64 strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度。另外,strlen()只计算可见的字符,而不把空字符计算在。

2.P70 strcpy()函数将字符串复制到字符数组中。

        strcpy(charr1, charr2); //copy charr2 to charr1

3.P70 strcat()函数将字符串附加到字符数组末尾。

        strcat(cahrr1, charr2); // append contents of charr2 to charr1

4.P94 strncpy()函数将字符串复制到字符数组中,与strcpy()函数不同的是,strncpy()函数能够避免因为目标数组比字符串小而导致字符串中剩余的部分复制到数组后面的内存字节中的问题,可能会覆盖程序正在使用的其他内存。strncpy()函数将接受第3个参数——要复制的最大字符数。然而,要注意的是,如果该函数在到达字符串结尾之前,目标内存已经用完,则它将不会添加空字符。因此,应该这样使用函数:

        char food[20];

        strncpy(food, "a picnic basket filled with many goodies", 19);

        food[19] = '\0';

        这样最多将19个字符复制到数组中,然后将最后一个元素设置成空字符。如果该字符串少于19个字符,则strncpy()将在复制完该字符串之后加上空字符,已标记该字符串的结尾。

        经常需要将字符串放到数组中。初始化数组时,请使用=运算符;否则应使用strcpy()或strncpy()。

5.P118 strcmp()函数能够比较C风格字符串,由于C++将C风格字符串视为地址,因此如果使用关系运算符来比较它们,将无法得到满意的结果。strcmp()函数接受两个字符串地址作为参数。这意味着参数可以是指针、字符串常亮或字符数组名。如果两个字符串相同,该函数将返回零;如果第一个字符串按字母顺序排在第二个字符串之前,则strmp()函数将返回一个负数值;如果第一个字符串按字母顺序排在第二个字符串之后,则strcmp()函数将返回一个正数值。顺便说一句,虽然不能用关系运算符来比较字符串,但却可以用它们来比较字符,因为字符实际上是整型。

string头文件。要使用string类,必须在程序中包含头文件。string类位于名称空间std中,因此您必须提供一条using编译指令,using声明或std::string来引用它。string类定义隐藏了字符串的数组性质,让您能够像处理普通变量那样处理字符串。

1.P71 size()函数的功能基本上strlen()函数相同,strlen()函数是一个常规函数,它接受一个C风格字符串作为参数,并返回该字符串包含的字符数,但size()函数与strlen()函数句法不同:str1不是被用作函数参数,而是位于函数名之前,它们之间用句点链接。这种句法表明,str1是一个对象,而size()是一个类方法。方法是一个函数,只能通过其所属类的对象进行调用。在这里,str1是一个string对象,而size()是string类的一个方法。

vector头文件。要使用vector类,必须在程序中包含头文件。vector类位于名称空间std中,因此您必须提供一条using编译指令,using声明或std::vector来引用它。由于vector对象在您插入或添加值时自动调整长度,因此可以将其初始长度设置为零。但要调整长度,需要使用vector包中的各种方法。一般而言,下面的声明创建一个名为vt对vector对象,它可存储n_elem个类型为typeName的元素,其中参数n_elem可以是整型常量,也可以是整型变量。

vector<typeName> vt(n_elem);

array头文件。要使用array类,必须在程序中包含头文件。array类位于名称空间std中,因此您必须提供一条using编译指令,using声明或std::array来引用它。推而广之,下面的声明创建一个名哦日arr的array对象,它包含n_elem个类型为typename的元素,与创建vector对象不同的是,n_elem不能是变量。

array<typeName, n_elem> arr;

ctime(在老式实现中为time.h)中定义了一个符号常量——CLOCKS_PER_SEC,该常量等于每秒钟包含的系统时间单位数。因此将系统时间除以这个值,可以得到秒数。或者将秒数乘以CLOCKS_PER_SEC,可以得到以系统时间单位为单位的时间。其次,ctime将clock_t作为clock()返回类型的别名,这意味着可以将变量声明为clock_t类型,编译器将把它转换为long、unsigned int或适合系统的其他类型。

cctype(在老式实现中为ctype.h)是C++从C语言继承了一个与字符相关的、非常方便的函数软件包,它可以简化诸如确定字符是否为大写字母、数字、标点符号等工作,这些函数的原型是在头文件cctype中定义的。例如,如果ch是一个字母,则isalpha(ch)函数返回一个非零值,否则返回0。同样,如果ch是标点符号(如逗号或句号),函数ispunct(ch)将返回true。(这些函数的返回类型为int,而不是bool,但通常bool转换让您能够将它们视为bool类型。)使用这些函数比使用AND和OR运算符更方便,且AND/OR格式假设A-Z的字符编码是连续的,其他字符的编码不在这个范围内。这种假设喻队ASCII码来说是成立的,但通常并非总是如此。


常用的运算符:

运算符是内置的语言元素,对一个或多个数据进行运算,并生成一个值。例如,加号运算符+将两个值相加。

1.P35 sizeof运算符返回类型或变量的长度,单位为字节。

             sizeof查看类型大小需使用()

             sizeof查看变量大小可使用()也可不使用()

2.P55 static_cast<>强制类型转换运算符可用于将值从一种数值类型转换为另一种数值类型。

             static_cast<typeName> (value)



P36 climits中的符号常量,表 3.1

P43 C++转义序列的编码,表 3.2

P148 cctype中的字符函数,表 6.4



简单文件输入/输出 : P158-P162

猜你喜欢

转载自blog.csdn.net/Aaaa_ZZZ/article/details/126829430
今日推荐