2026《数据结构》考研复习笔记一(C++基础知识)

C++基础知识复习

一、数据类型

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 it=vec.begin(); * Lambda表达式:auto add=\[\](int a,int b){return a+b;}; auto x=10;
decltype 获取表达式的类型 * 模板编程:auto add(T,a,U b)->decltype(a+b){return a+b;} * Lambda返回类型:auto func=\[\](int a,double b)->decltype(a+b){return a+b;}; * 依赖表达式类型的变量声明:decltype(vec.size())len=vec.size(); decltype(x) y=20;
initializer_list 初始化列表类型 * 初始化容器:vectorv={1,2,3} * 初始化自定义类型:MyClass(initializer)listargs){}MyClass obj={10,20,30}; * 作为函数参数:void print(initializer_list< int>vals){}print({1,2,3}); initializer_list list = {1, 2, 3};
tuple 元组类型,存储多个不同类型的值 tuple

笔记:复习迭代器Lambda表达式
【跳转复习总结】

1.3派生类型

派生类型 描述 示例
数组 相同类型元素的集合 int arr5={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};

笔记:复习mapset 的区别,理解红黑树 的原理
【跳转复习总结】

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 title50;

char author50;

char subject100;

int book_id;

}Books;

为Book{...}结构体取别名Books,可以用Books来定义Book类型的变量而不需要struct关键字,如Books book1;

复习总结

  1. 复习基本数据类型的取值范围和计算方法(计算机组成原理)
  2. 复习迭代器Lambda表达式(leetcode)
  3. 复习函数指针结构体
  4. 复习mapset 的区别,理解红黑树的原理

后记:关于C++的高级教程和重点知识点代码以后可能会继续出,目前只总结基础知识点,前面内容总结自【菜鸟教程】,笔记只摘录了本人的疑难杂症,若有更多问题可以访问该网站,同时欢迎大家指正和批判文章中的内容,如果有格式上的优化建议也欢迎评论

相关推荐
CSharp精选营2 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
RainCity3 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
刘马想放假5 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠6 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
LinXunFeng10 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
Darling噜啦啦13 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠14 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾14 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
闪闪发亮的小星星14 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq14 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息