C++基础知识复习
- 一、数据类型
- 二、修饰符和运算符
- 三、Lambda函数和表达式
- 四、数学函数
- 五、字符串
- 六、结构体
一、数据类型
1.1基本类型
基本类型 | 描述 | 字节(位数) | 范围 |
---|---|---|---|
char | 字符类型,存储ASCLL字符 | 1(8位) | -128 到 127 或 0 到 255(依赖编辑器) |
signed char | 有符号字符 | 1(8位) | -128 到 127 |
unsigned char | 无符号字符 | 1(8位) | 0到255 |
int | 整型 | 4(32位) | -2,147,483,648 到 2,147,483,647 |
unsigned int | 无符号整型 | 4(32位) | 0 到 4,294,967,295 |
float | 单精度浮点数 | 4(32位) | 约 ±3.4e±38(6-7 位有效数字) |
double | 双精度浮点数 | 8(64位) | 约 ±1.7e±308(15 位有效数字) |
笔记:复习基本数据类型的取值范围和计算方法
【跳转复习总结】
1.2C++新增类型
C++11新增类型 | 描述 | 示例 |
---|---|---|
auto | 让编辑器自动推断类型
| auto x=10; |
decltype | 获取表达式的类型
| decltype(x) y=20; |
initializer_list | 初始化列表类型
| initializer_list list = {1, 2, 3}; |
tuple | 元组类型,存储多个不同类型的值 | tuple |
笔记:复习迭代器和Lambda表达式
【跳转复习总结】
1.3派生类型
派生类型 | 描述 | 示例 |
---|---|---|
数组 | 相同类型元素的集合 | int arr[5]={1,2,3}; |
指针 | 存储变量内存地址的类型 | int* p=&x; |
引用 | ref和x指向同一块地址 | int & ref=x; |
函数 | 函数类型,表示函数名 | int func(int a,int b); |
结构体 | 用户自定义数据类型,可包含不同的类型成员 | struct Piont{int x;int y;); |
类 | 用户定义的数据类型,支持封装、继承和多态 | class MyClass{}; |
联合体 | 多个成员共享同一块内存 | union Data{int x;float f;}; |
枚举 | 用户定义的整数常量集合 | enum Color{RED,GREEN;}; |
笔记:复习函数指针、结构体赋值和类
【跳转复习总结】
1.4别名
别名 | 描述 | 示例 |
---|---|---|
#define | 文本替换(预处理器处理),不进行类型检查 | #define Myint int |
typedef | 类型别名(编辑器处理) | typedef int Myint; |
using | 类型别名(编辑器处理) | using Myint=int; |
1.5标准库类型
标准库类型 | 描述 | 示例 |
---|---|---|
string | 字符串类型 | string s="hello"; |
vector | 动态数组 | vector< int >v={1,2,3}; |
pair | 存储两个值的容器 | pair< int,float>p(1,2.0); |
map | 键值对容器 | map< int,string>m; |
set | 唯一值集合 | set< int>s={1,2,3}; |
笔记:复习map和set的区别,理解红黑树的原理
【跳转复习总结】
1.6枚举类型
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
……
标识符[=整型常数],
}枚举变量;
例如enum color{red,green,blue}c;
c=blue;
默认情况下,第一个名称为0,第二个为1,以此类推。还可以赋值enum color{red,green=5,blue};
1.7类型转换
常量转换 | 用于将const类型的对象转换为非const类型的对象。 const int i=10; int &r=const_cast< int&>(i); |
---|---|
重新解释转换 | 将一个数据类型的二进制内存表示按另一个数据类型解释,属于强制按位转化 int i=10; float f=reinterpret_cast< float&>(i);//f=1.4013e-44 |
静态转换 | 将一种数据类型的值强制转换为另一种数据类型的值,通常用于类型相似的对象之间的转换,如int转换为float int i=10; float f=static_cast< float>(i); |
动态转换 | 用于在继承层次结构中进行向下转换(downcasting)的一种机制,通常用于将一个基类指针或引用转换为派生类指针或引用 |
二、修饰符和运算符
2.1修饰符
const | const定义常量,表示该变量的值不能被修改 |
static | static定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件函数访问 |
2.2运算符
.(点)和->(箭头) | 成员运算符用于引用类、结构和共同体的成员 |
& | 指针运算符&返回变量的地址,例如&a给出变量的实际地址 |
* | 指针运算符*表示解引用。指针var的值是内存地址,*var访问该内存地址的存放内容 |
注:
- 成员运算符.使用对象是对象实例,如p.name。成员运算符->使用对象是指针指向的对象(相当于先解引用再使用.),即p->name≡(*p).name
- int *x=&y;int z=*x;其中&y表示获取y的内存地址,指针x的值是y的内存地址;*x表示获取x指向的内存地址的存放内容,z的值是x指向的内存地址的存放内容
三、Lambda函数和表达式
一般形式:[capture] (parameters)->return-type{body} | [] (int x,int y)->int{int z=x+y;return z+x;} |
特殊情况:[capture] (parameters){body}。“没有返回值”或者“Lambda仅包含一个return语句” | []{global_x++;} [] (int x,int y){return x |
在Lambda表达式内可以访问当前作用域的变量,可以通过前面的[]指定
[] | 没有定义任何变量。使用未定义变量会引发错误 |
[x,&y] | x以传值方式传入(默认),y以引用方式传入 |
[&] | 任何被使用到的外部变量都隐式地以引用方式加以引用 |
[=] | 任何被使用到的外部变量都隐式地以传值方式加以引用 |
[&,x] | x显示地以传值方式加以引用,其余变量以引用方式加以引用 |
[=,&z] | z显示地以引用方式加以引用, |
四、数学函数
double sqrt(double); | sqrt(x)返回√x |
double pow(double,double); | pow(x,y)返回xy |
double floor(double); | 向下取整(小于或等于参数的最大整数) |
double ceil(double); | 向上取整(大于或等于参数的最小函数) |
int rand(); | 随机数函数,通常与srand()time()函数搭配 srand((unsigned)time(NULL));//void srand(unsigned int seed); int r=rand(); |
五、字符串
5.1C字符串
strcpy(s1,s2); | 复制字符串s2到字符串s1 |
strcat(s1,s2); | 连接字符串s2到字符串s1的末尾 |
strlen(s1); | 返回字符串s1的长度 |
strcmp(s1,s2); | if(s1==s2)return 0; else if(s1 < s2)return -1; else return 1; |
strchr(s1,ch); | 返回一个指针,指向字符串s1中字符ch第一次出现的位置 |
strstr(s1,s2); | 返回一个指针,指向字符串s1中字符串s2第一次出现的位置 |
5.2C++的string类
str1=str2; | 复制字符串s2到字符串s1 |
str3=str1+str2; | 连接字符串s2到字符串s1的末尾 |
str1.size(); | 返回字符串s1的长度 |
六、结构体
6.1定义处命名
struct type_name{
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
}object_names;
注释:type_name是结构体类型名,object_names是结构体变量名。结构体成员访问运算符(.),如a.name
6.2typedef关键字
typedef struct Books{
char title[50];
char author[50];
char subject[100];
int book_id;
}Books;
为Book{…}结构体取别名Books,可以用Books来定义Book类型的变量而不需要struct关键字,如Books book1;
复习总结
- 复习基本数据类型的取值范围和计算方法(计算机组成原理)
- 复习迭代器和Lambda表达式(leetcode)
- 复习函数指针、结构体和类
- 复习map和set的区别,理解红黑树的原理
后记:关于C++的高级教程和重点知识点代码以后可能会继续出,目前只总结基础知识点,前面内容总结自【菜鸟教程】,笔记只摘录了本人的疑难杂症,若有更多问题可以访问该网站,同时欢迎大家指正和批判文章中的内容,如果有格式上的优化建议也欢迎评论