C++基本语法的部分总结

  • 指数运算符:
  •     #include<cmath>
  •     a^b: pow(a, b)
  • ctime头文件中的time(0)函数返回自格林尼治标准时间1970年1月1日00:00:00至当前时刻间的秒数(例如 int x = time(0)),#include<ctime>
  • 简写运算符:+=、-=、*=、/=、%=
  • 自增、自减运算符:++、--
  • 强制类型转换:static_cast<value> , 例如static_cast<int>(5.0)
  • 静态类型转换:(value), 例如 i = (int)5.4
  • 类型转换并不改变被转换变量的值。
  • 两个浮点值的比较可能会出现偏差:因为浮点数是有限制的精度,设计浮点数的计算会导致舍入的误差,有可能出现0.5 != 0.6 - 0.1 等误差。一般来说,比较两个浮点值用两个数间的差距的大小来比较,间距小于一定值时我们可以认为两个值是相等的,即|x-y|<α,α为一个非常小的数值,通常,比较两个double值α设置为10^-14,比较两个float值时设置为10^-7。
  • 注意 !a<=50 与 !(a<=50) 的不同。
  • 生成随机数:
  •     #include<cstdlib>
  •     rand() 
  •     //生成伪随机数,括号内默认为1,每次在同一个系统执行此函数时,会生成同一个数
  •     //可以改变括号中的种子的值来改变生成的随机数
  •     srand(seed) 
  •     //改变随机数的种子的值,为确保每次生成的随机数都不同,可以将seed设置为time(0)
  •     例如:生成0-9间的随机整数
  •     srand(time(0));
  •     cout << rand()%10 << endl;
  • 条件表达式:
  •   boolea-expression ? expression1 : expression2
  •   当表达式为真时,执行语句一,反之执行语句二;
  •   y = x > 0 ? 1 : -1
  •   当x > 0 时,y=1,反之y=-1
  • 三角函数:
  • 头文件:#include<cmath>
  • sin(),cos(),tan()
  • asin(),acos(),atan()  //返回弧度角度值
  • 指数函数:
  • 头文件:#include<cmath>
  • exp(x)  /*返回e^x的值*/,
  • log(x)  /*返回自然对数的值(loge(x))*/,
  • log10(x),
  • pow(a, b), sqrt(x)   /*返回x的算术平方根*/
  • 近似函数:
  • 头文件:#include<cmath>
  • ceil(x):向上取整
  • floor(x):向下取整
  • min,max,abs:
  • 头文件:GNU C++:#include<cstdlib>  ;  VC++:#include<algorithm>
  • max(x,y)返回两个数的最大值
  • min(x,y)返回两个数的最小值
  • abs(x)返回一个数的绝对值
  • 部分转义字符:
  • \b回退符
  • \t制表符
  • \n换行符
  • \f换页符
  • \r回车符
  • \\在字符串中表示\
  • \"在字符串中表示"
  • '','\t','\f','\r','\n'被称为空白字符
  • 当一个整数被转换为一个字符时只有低8位能被使用,剩下的部分就被忽略掉了,
  • 而浮点数被转换为字符时会先转换为int型
  • 字符函数:
  • 头文件:#include<cctype>
  • isdigit()如果指定的字符是数字,返回true
  • isalpha()如果指定的字符是字母,返回true
  • isalnum()如果指定的字符是数字或字母,返回true
  • islower()如果指定的字符是小写字母,返回true
  • isupper()如果指定的字符是大写字母,返回true
  • isspace()如果指定的字符是空白字符,返回true
  • tolower()返回字符的小写形式
  • toupper()返回字符的大写形式
  • string对象的简单函数:
  • length()返回字符串中的长度,例如message.length()
  • size()返回字符串的字符个数,一般地,与length()相同,message.length()
  • at()返回字符串中指定位置的字符,message.at(2)(编号从零开始),也可以像数组一样使用,即message[2]
  • string s = "ABC"; s+= "D";  //valid    
  • string s = "abc" + "def";  //invalid
  • 可以使用关系运算符== , != , < , <= , > , >= , 来比较两个字符串。具体比较过程是两个字符串从左到右每一个字符进行比较。
  • getline(cin , s , delimitChararcter) 可以读取一个字符串,即使字符串中含有空白字符,例如New York。
  • getline(cin , a , '\n' ) 第三个位置的参数默认为 '\n' ,所以可以用getline(cin , a )来代替。
  • 常用的流操作:
  • #include<iomanip>
  • setprecision(n) 设置一个浮点数的精度,有效数字位数,位数太多会近似(四舍五入)而不是直接舍去
  • fixed 显示指定小数位数的浮点数
  • showpoint 即使没有小数部分也显示以零补足的小数点后的位数
  • setw(width) 指定打印字段的宽度,只可影响一次输出,不足时自动补齐,越界时自动调整宽度,默认为右对齐
  • left 调整输出为左对齐
  • right 调整输出为右对齐
  • cout << fixed << setprecision(2); //保留两位小数
  • cout << showpoint << setprecision(6); //保留六位精度
  • 简单的文件操作:
  • 写入文件:
  • ofstream a; //声明一个ofstream变量
  • open("example.txt"); //创建一个名为examp.txt的文件,若存在则销毁后重新创建
  • a << 35; //将35写入文件中
  • close;
  • 读取文件:
  • ifstream b; //声明一个ifstream变量
  • b.open("example.txt"); //指定一个文件
  • b >> s1; //读取到s1中
  • b.close();
  • input对象的eof()函数可以判断文件是否结束,input.eof()
  • 二分法,数组应事先排好序才可使用二分法
  • 部分C字符串函数:(size_t 在大多数编译器下相当于 unsigned int)
  • #include<cstring>:
  • size_t strlen(s[]):返回字符串的长度
  • strcpy(char s1[], const char s2[]):将字符串s2复制给s1
  • strncpy(char s1[], const char s2[], size_t n):将s2的前n个复制给s1
  • strcat(char s1[], const char s2[]):将s2拼接到s1之后,改变s1,s1中要有足够的空间
  • strncat(char s1[], const char s2[], size_t n): 将s2的前n个拼接到s1之后
  • int strcmp(char s1[], const char s2[]):通过字符的数值码对比,判断s1 > 、= 、< s2,返回+1 、 0 、 -1(不同编译器返回值可能不同)
  • int strncmp(char s1[], const char s2[], size_t n):比较前n个
  • #include<cstdlib>:
  • int atoi(char s[]):返回字符串对应的int值
  • double atof(char s[]):返回字符串对应的double值
  • long atol(char s[]):返回字符串对应的long值
  • void itoa(int value, char s[], int radix):获得一个字符串的整数值,基于一个指定的集数,有些编译器不支持,用于进制转换,itoa(a, b, c)将a转换成c进制数以字符串形式存储在b中。
  • 字符串强制转换为数字时,转换为其ASCII码值,所以当字符‘9’转换为数字‘9’时,需要减去一个字符‘0’,即 - '0'。
  • 递归辅助函数:声明一个重载的函数,以接收额外的参数。
  • 涉及字符串和数组时,递归辅助函数将会很有用。
  • 构造函数:
  • 构造函数的名字必须和类名相同;
  • 构造函数没有返回类型——即使是void也不可以;
  • 在创建对象时,构造函数被使用,它的作用就是初始化对象。
  • 构造函数可以重载
  • 一个变量可以在一条语句中声明和初始化,但是作为一个类成员,数据域不可以在声明时进行初始化。例如在类中 double r = 5.0; 将会是错误的。
  • 一个类的声明可以不包含构造函数的声明,这种情况下相当于在类中隐含声明了一个无参的空构造函数。这个构造函数被称为缺省构造函数,只有未显式的声明构造函数时,编译器才会自动的提供缺省构造函数。
  • 对象的数据域和函数通过使用点运算符(.)来访问。
  • 类成员可以按任意顺序声明,但较好的方式是先声明公有成员再声明私有成员。
  • string s = "Welcome to HE"
  • string s("Welcome to ")
  • 两种方式都可以创建一个字符串,但是第二种效率更高
  • 追加字符串s.append()在字符串s后增加一串字符
  • 字符串赋值:
  • +assign(s[]:char):string    将一个字符数组或者一个字符串s赋予当前字符串
  • +assign(s:string):string    将字符串s赋予当前字符串
  • +assign(s:string, index:int, n:int):string     将s从下标index起的n个字符赋予当前字符串
  • +assign(s:string, n:int):string     将s的前n个字符赋予当前字符串
  • +assign(n:int, ch:char):string     将当前字符串赋值给为ch的n次重复
  • +at(index:int):char  返回当前字符串中下标index处的字符
  • +clear():void  清除当前字符串中的所有字符
  • +erase(index:int, n:int):string  删除当前字符串从下标index处开始的n个字符
  • +empty():bool  若当前字符串为空,则返回true
  • +length():int  返回当前字符串中字符个数
  • +size():int  与length()相同
  • +capacity():int  返回为当前字符串分配的存储空间的大小
  • +c_str():int  返回当前字符串对象的C字符串
  • +data():char[]  与+c_str相同
  • +compare(s:string):int  根据当前字符串大于、等于、小于s分别返回1, 0, -1 不同编译器会有所不同
  • +compare(index:int, n:int, s:string)  比较当前字符串与子字符串s(index, ..., index+n-1)
  • +substr(index:int, n:int):string  返回当前字符串从下标index开始的n个字符组成的子串
  • +substr(index:int):string  返回当前字符串从下标index开始的子串
  • +find(ch:char):unsigned  返回字符ch出现的第一个位置
  • +find(ch:char, index:int):unsigned  返回从下标index开始的ch出现的第一个位置
  • +find(s:string):unsigned  返回子串s出现的第一个位置
  • +find(s:string, index:int):unsigned  返回字符串从下标index开始子串s出现的第一个位置
  • (如果未找到返回npos(string::npos),npos是string定义的一个常量)
  • +insert(index:int, s:string):string  将字符串s插入当前字符串下标index处
  • +insert(index:int, n:int, ch:char):string  将n个ch字符插入当前字符串下标index处
  • +replace(index:int, n:int, s:string):string  将当前字符串从下标index处开始的n个字符串替换为字符串s
  • 字符串运算符:
  • []  以下标形式访问字符串中的字符
  • =  复制字符串到另一个字符串
  • +  连接字符串
  • +=  连接字符串给当前字符串
  • <<,>>  流操作
  • 比较运算符
  • 头文件<sstream>中的stringstream类提供的接口可以使我们类似处理输入/输出流一样来处理字符串
  • 实例对象:不同变量的成员独立无关
  • 静态变量:一个类的变量共享数据
  • 声明静态变量或者静态函数:在变量或者函数声明前放置修饰符static
  • 实例函数和实例数据域是从属于类对象的,只有创建对象后,才能通过特定的对象来使用它们,而对于静态函数和静态数据域,既可以通过任意的类对象来访问,又可以直接通过类名来访问。
  • 如果变量或者函数是依赖于具体类对象的,那么就应该声明为实例的;否则,如果变量或者函数不依赖于任何类对象,那么就应该声明为静态的。
  • 只读成员函数,参数加上const告知编译器该参数不会被改变,把const关键字放置在函数头的结尾即可。
  • 只有实例函数可以被定义为只读函数,静态函数不可以。
  • 在面向过程的程序设计中,数据和数据的操作是独立的,所以需要把数据传递给函数。而面向对象编程把数据和操作捏合在一起,形成了一个整体,叫做对象。
posted @ 2019-07-05 17:37  祟役丶  阅读(697)  评论(0编辑  收藏  举报