学习笔记N-026
C++基础
- 更新
- 内容块
- 77
- 阅读
- 约 3 分钟
- 路径
- 学习笔记 / C++
匿名函数
循环
for (int i = 0; i < n; i++) i 是循环变量,在 i<n 成立的前提下循环
for (auto &n : nums)引用传递一个 n,n 在不同循环中代表 nums 中不同index 所对应的值,直接对 n 进行修改==直接对原 nums 修改
vector<pair<int, int>> dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
for (auto [dx, dy] : dir)
for (auto &[dx, dy] : dir) //引用版本- 1.原[dx, dy]对应的是 pair 中对应的两个值,相当于在循环时对 dir 解包了。
- 2.在循环中可以让循环中的值对 [dx, dy]运算,原题用这个循环对于走迷宫上下左右是否符合条件作为判断迭代。因为不能修改 dir 所以用了值传递
- 3.每次循环传入和是 pair 中不同的值
重载
位运算:
异或,与,或,取反,左移右移
取反:基于特定的位数去运算,如 8,16不足时直接补齐。还分为有符号和无符号。
左移右移:和符号有关,正数填补0,负数填补 1。保证符号位不变。
异或:1. 一个数异或自身为零,一个数异或零为自身。2.通过异或不需要中间变量来交换两个变量。
文件管理中的位运算
#include <bitset>
#include <bit>
vector <bool>
文件管理:
模板:
兼容各种数据类型
实现自定义模板或者是 stl 重写
类和函数都可以使用模板定义
可变参数模板(运算符号问题,运算律)

修饰词(约束行为)

Const:
Const 和变量
Const 和指针<const 指针,指向 const的指针,指向 const 的 const 指针

要点:已经被 const 所指定的变量只能用 const 指针来指向。
Const 和函数
Const 和成员函数
声明为 const 的成员函数,在函数中无法修改成员变量。传入const 的值,无法调用普通的成员函数来修改。
所以,成员函数可以有除签名为 const 和 非 const 以外内容完全相同的两个版本

mutable(在 const 的约束下开一个必要的口子)
定义变量时使用,表示这个成员变量在const 成员函数中可以被修改
constexpr
定义真正的常量,在编译时这个量就被确定,在运行时不可被修改
static
在函数内变量前加上static等价于把这个变量开到全局,但是只能在函数内访问
struct Test {
static int a; // 静态成员变量
int b; // 普通成员变量
static void func() { // 静态成员函数
a; // ✅ 合法:可以访问静态成员变量
b; // ❌ 非法:无法访问非静态成员变量
*this; // ❌ 非法:静态函数没有 this 指针
}
};
int Test::a = 0; // 静态成员变量的类外初始化
int main() {
Test x, y; // 创建两个结构体对象
x.a = 123; // 通过对象访问静态成员变量
cout << y.a << endl; // 输出 123(所有对象共享同一个 a)
cout << Test::a << endl; // 直接通过类名访问静态成员变量
Test::func(); // 直接通过类名调用静态成员函数
}对上面的this指针进行解释:
inline
修饰函数,表示内联函数

预处理器
单个文件编译,多个文件编译 CMake
宏(只是简单的文本替换)会在预处理阶段替换为数字

在编译前,根据宏的定义状态或条件,选择性保留 / 丢弃代码块。

宏可以在编译时设置
其他
getline(cin,std)和cin >> str区别是遇空格不停止,只认回车换行。读取一整张
行字符串