项目空间

学习笔记N-026

C++基础

更新
内容块
77
阅读
约 3 分钟
路径
学习笔记 / C++

匿名函数

循环

代码块C++
for (int i = 0; i < n; i++) 

i 是循环变量,在 i<n 成立的前提下循环

代码块C++
for (auto &n : nums)

引用传递一个 n,n 在不同循环中代表 nums 中不同index 所对应的值,直接对 n 进行修改==直接对原 nums 修改

代码块C++
vector<pair<int, int>> dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
for (auto [dx, dy] : dir)
for (auto &[dx, dy] : dir)    //引用版本
  1. 1.原[dx, dy]对应的是 pair 中对应的两个值,相当于在循环时对 dir 解包了。
  1. 2.在循环中可以让循环中的值对 [dx, dy]运算,原题用这个循环对于走迷宫上下左右是否符合条件作为判断迭代。因为不能修改 dir 所以用了值传递
  1. 3.每次循环传入和是 pair 中不同的值

重载

位运算:

异或,与,或,取反,左移右移

取反:基于特定的位数去运算,如 8,16不足时直接补齐。还分为有符号和无符号。

左移右移:和符号有关,正数填补0,负数填补 1。保证符号位不变。

异或:1. 一个数异或自身为零,一个数异或零为自身。2.通过异或不需要中间变量来交换两个变量。

文件管理中的位运算

#include <bitset>

#include <bit>

vector <bool>

文件管理:

模板:

兼容各种数据类型

实现自定义模板或者是 stl 重写

类和函数都可以使用模板定义

可变参数模板(运算符号问题,运算律)

C++基础 · 图 1

修饰词(约束行为)

C++基础 · 图 2

Const:

Const 和变量

Const 和指针<const 指针,指向 const的指针,指向 const 的 const 指针

C++基础 · 图 3

要点:已经被 const 所指定的变量只能用 const 指针来指向。

Const 和函数

Const 和成员函数

声明为 const 的成员函数,在函数中无法修改成员变量。传入const 的值,无法调用普通的成员函数来修改。

所以,成员函数可以有除签名为 const 和 非 const 以外内容完全相同的两个版本

C++基础 · 图 4

mutable(在 const 的约束下开一个必要的口子)

定义变量时使用,表示这个成员变量在const 成员函数中可以被修改

constexpr

定义真正的常量,在编译时这个量就被确定,在运行时不可被修改

static

在函数内变量前加上static等价于把这个变量开到全局,但是只能在函数内访问

代码块C++
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

修饰函数,表示内联函数

C++基础 · 图 5

预处理器

单个文件编译,多个文件编译 CMake

宏(只是简单的文本替换)会在预处理阶段替换为数字

C++基础 · 图 6

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

C++基础 · 图 7

宏可以在编译时设置

其他

getline(cin,std)和cin >> str区别是遇空格不停止,只认回车换行。读取一整张

行字符串