c++学习笔记

来源:互联网 发布:windows安装光盘多少钱 编辑:程序博客网 时间:2024/06/08 15:58

数据运算

混合运算的类型转换

当运算符两边的操作数类型不同但类型相容时,系统自动将不同的数据类型转换成相同类型,再进行运算。

具体规则如下:

  • 字符可作为整数参与运算,整数值为其ASCII码。
  • 对于字符或短整型操作数,系统自动变换成整型。
  • 对于单精度型操作数时,系统自动变换成双精度型。
  • 当两操作数类型不同时,将精度低(或表示范围小)的操作数的数据类型变换成与另一操作数类型相同,再进行运算。

例如,设有变量:

char c1, c2;int i1, i2;float x1, x2;

则表达式 x2=c1*i1+c1*x1+c1*c2 的求值过程为:

将c1转换成整型,完成c1\*i1,结果为t1;  将c1和x1转换成双精度型,完成c1\*x1,结果为t2;  将c1和c2均转换成整型,完成c1*c2,结果为t3;  将t1转换成双精度型,完成t1+t2,结果为t4;  将t3转换成双精度型,完成t4+t3;  最后结果转化为单精度型,赋给x2。

浮点数取整

  • 强制取整,如int a = 2.5; 或 int a = (int)2.5; 这两种方法都是直接舍弃小数点
  • floor(),下取整,向负无穷大舍入,如floor(2.5) = 2; floor(-2.5) = -3;
  • ceil(),上取整,向正无穷大舍入,如floor(2.5) = 3; floor(-2.5) = -2;

< climits >

这个头文件下基本都是常用数值的宏定义,主要是不同的变量的最大值和最小值

climits

数字和字符串的相互转换

char[] 转 数字

#incldue <cstdlib>double atof (const char* str);int atoi (const char * str);long int atol ( const char * str );long long int atoll ( const char * str );float strtof (const char* str, char** endptr); /*    endptr 用来存储该字符串空格的子串,也可以为 NULL, 如:        char a[] = "1234.5678 1.2";        char *b;        float c = strtof(a, &b);        printf("%f\n%s\n",c,b);    输出结果:        1234.567749        1.2*/long double strtold (const char* str, char** endptr);long long int strtoll (const char* str, char** endptr, int base);/*    base 为转译后的进制, base = 0时,默认为10进制, 如:        char a[] = "111";        long c = strtol(a, NULL, 2);        printf("%ld\n",c);    输出结果:        7*/unsigned long int strtoul (const char* str, char** endptr, int base);unsigned long long int strtoull (const char* str, char** endptr, int base);

数字 转 char[]

#include <cstdio>/*    sprintf, 不但可以将数字转为char[], 还支持格式化转译*/int sprintf ( char * str, const char * format, ... );char[10] s;sprintf(s, "%d", 123); //产生"123"sprintf(s, "%5d%5d", 123, 4567); //产生:"  123 4567"

string 和 char[] 互换

#include <string>#include <cstring> // strcpy()string -> char[]    string str ("Please split this sentence into tokens");    char cstr[str.length()];    strcpy (cstr, str.c_str());char[] -> string    string a = cstr;    string b(cstr);

string 转 数字

#include <string>/*    idx 用来存 字符串 转为 数字 后剩下的子串    base 进制*/int stoi (const string&  str, size_t* idx = 0, int base = 10);long stol (const string&  str, size_t* idx = 0, int base = 10);unsigned long stoul (const string&  str, size_t* idx = 0, int base = 10);long long stoll (const string&  str, size_t* idx = 0, int base = 10);unsigned long long stoull (const string&  str, size_t* idx = 0, int base = 10);float stof (const string&  str, size_t* idx = 0);double stod (const string&  str, size_t* idx = 0);long double stold (const string&  str, size_t* idx = 0);

数字 转 string

#include <string>string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);string to_string (unsigned long long val);string to_string (float val);string to_string (double val);string to_string (long double val);

字符串

基础操作

  • “string”[i],字符串常量后也可以直接用[]来访问其中的字符

进阶知识

匿名函数

  • 匿名函数,也称lamda函数,可以为编程提供很多的便利,但是我现在理解的还很浅。可以在 c++11标准:匿名函数(匿名表达式)lambda 这个博客中简单了解一下,等我深入理解了再详细介绍吧

参考资料

  1. http://blog.csdn.net/e_wsq/article/details/15026201
  2. http://www.cnblogs.com/yiii/p/5139130.html
  3. http://www.cplusplus.com
  4. http://blog.csdn.net/heyutao007/article/details/5773570