2024-11-16, 20:18-今日內容

Cpp一般的普通的代码块, 结束了是不加上分号的。 咋cpp里main, 某些特定的module在具体define函数(不是在h文件的声明) 需要每次都加上作用域:: Cpp初始化 2d的matrix的方法:注意看 特鄙视后面这一坨,不能直接写成(4, vector(4, 0)) Cpp在声明,也就是h文件里面的时候,是不需要写清楚作用域的也就是::是不能写的。 只有在cpp文件里面,具体的实现才要写,看例子… Cpp里面即使函数没有任何返回的value, 也需要吧void补上。 Cpp里面的set和get主要是用来访问和改变私有变量的value。 这是一种约定俗成, 你必须嗷非常了解一个东西该不该public… Cpp里面的size_type 是一种类型, 也就是标准库自带的;一般固定的size的matrix 就可以在定义长度w 和h的时候… Cpp 初始化一个matrix 可以有两种写法:也就是说我们其实是有知道m个row, 但是每个row我们让他的value事一个新的… Cpp 当我们知道了某个vector或者matrix的输出的形状了, 我们最开始也给他初始化了, 接下来就不需要在push back… Cpp 实现两个matrix的乘法, 涉及到我们固定控制vector:vector<vector> C(ah, vector… 默认用gcc17的方法 直接在zshrc里面吧g++的别名改成alias g++='g++ -std=c++17' Clang和gcc都是编译器, 一般gcc的错误和warning 比较简洁, clange的更加详细, 用户友好。 Cpp 大项目main如果要传递变量到某个小的模块, 可以考虑全局变量extern world。 并且main和小模块都是单独编译…

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp一般的普通的代码块, 结束了是不加上分号的。 void printMessage() { std::cout « “Hello, world!” « std::endl; } // 正确,函数结束后不需要分号

只有在定义某个class的时候, 才要: class Matrix { // Class body }; // 正确,类声明结束后需要分号

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

咋cpp里main, 某些特定的module在具体define函数(不是在h文件的声明) 需要每次都加上作用域:: 看例子: 

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp初始化 2d的matrix的方法:注意看 特鄙视后面这一坨,不能直接写成(4, vector(4, 0)) Matrix::Matrix(std::vector<std::vector> initial_grid = std::vector<std::vector>(4, std::vector(4, 0))) { grid = initial_grid; rows = initial_grid.size(); cols = initial_grid[0].size(); }

默认参数必须是一个 完整的表达式,可以唯一解析出结果。 (4, vector(4, 0)) 是不完整的初始化语法。 std::vector<std::vector>(4, std::vector(4, 0)) 是合法的表达式,明确表示创建一个 4x4的矩阵。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp在声明,也就是h文件里面的时候,是不需要写清楚作用域的也就是::是不能写的。 只有在cpp文件里面,具体的实现才要写,看例子… Cpp在声明,也就是h文件里面的时候,是不需要写清楚作用域的也就是::是不能写的。 只有在cpp文件里面,具体的实现才要写,看例子: 

class Matrix { public: Matrix(); void setGrid(std::vector<std::vector> new_grid); };

Matrix::Matrix() { // Constructor implementation }

void Matrix::setGrid(std::vector<std::vector> new_grid) { // Function implementation }

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp里面即使函数没有任何返回的value, 也需要吧void补上。 例子: void printMessage() { std::cout « “Hello, world!” « std::endl; }

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp里面的set和get主要是用来访问和改变私有变量的value。 这是一种约定俗成, 你必须嗷非常了解一个东西该不该public… Cpp里面的set和get主要是用来访问和改变私有变量的value。 这是一种约定俗成, 你必须嗷非常了解一个东西该不该public,否则你就不能把他从private弄成public, 要不然就不安全。 Set和get 就是让你的操作变得更安全的做法。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp里面的size_type 是一种类型, 也就是标准库自带的;一般固定的size的matrix 就可以在定义长度w 和h的时候… Cpp里面的size_type 是一种类型, 也就是标准库自带的;一般固定的size的matrix 就可以在定义长度w 和h的时候指明。 或者你可以看看std::cout。 这里的:: 就是说作用域是什么。 size_type 是一种专门用于容器大小的无符号整数类型,推荐用于容器的索引和大小表示 例子:

#include

// Header file for the Matrix class

/* ** Declare the following private variables: ** a 2D float vector variable called grid ** a vector size_type variable called rows ** a vector size_type variable called cols */

class Matrix { private: // 二维浮点数向量表示的矩阵 std::vector<std::vector> grid;

    // 使用 std::vector 的 size_type 来定义行和列
    std::vector<float>::size_type rows; // 行数
    std::vector<float>::size_type cols; // 列数 };

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp 初始化一个matrix 可以有两种写法:也就是说我们其实是有知道m个row, 但是每个row我们让他的value事一个新的… Cpp 初始化一个matrix 可以有两种写法:也就是说我们其实是有知道m个row, 但是每个row我们让他的value事一个新的vector形式的column。

1.	vector<vector<int>> C(ah, vector<int>(bw, 0)); 注意这里的vector<int>(bw, 0) 并没有给他名称。 别画蛇添足

2.	或者你可以这么写:
1.	vector<int> Crow(bw, 0);
2.	vector<vector<int>> C(ah, Crow)

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp 当我们知道了某个vector或者matrix的输出的形状了, 我们最开始也给他初始化了, 接下来就不需要在push back… Cpp 当我们知道了某个vector或者matrix的输出的形状了, 我们最开始也给他初始化了, 接下来就不需要在push back了 可以直接通过索引访问:

  1. 为什么可以不用 push_back 而直接用 C[i][j] += A[i][k] * B[k][j]? 原因 • 当 C 已经初始化为一个固定大小的二维向量时,可以通过索引 C[i][j] 直接访问和修改对应元素,而无需动态扩展。 • 在 vector 中,push_back 的作用是动态添加新元素,但 C 已经提前初始化为正确大小,因此只需修改已有的元素即可。

C[i][j] += A[i][k] * B[k][j]; 实用 C++ - 练习 — Practical C++ - Exercises

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp 实现两个matrix的乘法, 涉及到我们固定控制vector:vector<vector> C(ah, vector… Cpp 实现两个matrix的乘法, 涉及到我们固定控制vector:vector<vector> C(ah, vector(bw, 0)); 注意看这里是直接让每一行的长度是bw, 然后给它的额初始value是0;

C = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0} };

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

默认用gcc17的方法 直接在zshrc里面吧g++的别名改成alias g++=’g++ -std=c++17’ 

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Clang和gcc都是编译器, 一般gcc的错误和warning 比较简洁, clange的更加详细, 用户友好。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Cpp 大项目main如果要传递变量到某个小的模块, 可以考虑全局变量extern world。 并且main和小模块都是单独编译… Cpp 大项目main如果要传递变量到某个小的模块, 可以考虑全局变量extern world。 并且main和小模块都是单独编译的, 所以需要都定义vector 和string 等等 还有std。 具体看下面这个例子:

#include #include using namespace std;

extern vector world; // 声明外部变量

vector sense(const vector& p, const string& Z) { // 实现逻辑 vector q; float pHit = 0.6; float pMiss = 0.2;

for (size_t i = 0; i < p.size(); i++) {
    bool hit = (Z == world[i]); // 使用外部变量 world
    q.push_back(p[i] * (hit * pHit + (1 - hit) * pMiss));
}

float s = 0;
for (float prob : q) {
    s += prob;
}

for (float& prob : q) {
    prob /= s;
}

return q; }

#匯總今日內容