C++:类的继承
析构函数释放规律局部变量储存在栈区域所以释放的时候采用“后创建 先释放”的模式并且在函数内在创建一个栈,例如花括号,函数递归,会先释放内部栈元素,再释放外部栈元素1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <iostream>using namespace std;class MyClass {private: int id; static int count; // 静态成员变量public: MyClass(int id){ this->id=id; count++; cout << "Constructor: Object " << this->id << " created. Total objects: " << count...
拓扑排序和欧拉路
拓扑排序简介拓扑排序是指,在有向无环图(DAG)中,总有节点A指向节点B的这一关系,这可以理解为节点A的优先级高于节点B。而拓扑排序需要的就是把节点按优先级排序。 这需要用到两个概念:出度和入度。出度即节点A指向多少个节点,入度即节点A被多少个节点所指。显然,出度为0时,优先级最低,入度为0时优先级最高 那么如何输出一个拓扑排序呢?只需要我们找到所有入度为0的点,将其输出,再继续输出其下层的点,重复此步骤即可,这是天然符合BFS的。 接下来让我们看看用BFS和DFS实现拓扑排序的方法。 P1113...
Python基础:科学计算库
jupyter notebook我们先下载一个jupyter notebook。pip下载指令1pip install jupyterlab运行指令1jupyter notebook numpynumpy是py中,为实现快速科学计算与使用简便之间的均衡,把C的计算方式封装的一个类其中narray是核心类 numpy对象中有几个向量就有几个“维度”,而向量自身也有一个“长度” 可以笼统理解为,假如一个narray的shape是(3,5),它就近似于一个三行五列的矩阵 123456789101112import numpy as npa = np.arange(15).reshape(3, 5)aa.shape :有总共有多少个数据 维度乘大小a.ndim :有几个向量a.dtype.name :a.itemsizea.sizetype(a)b = np.array([6, 7, 8])btype(b) pandas一些简单的操作,通过注释做出说明123456789101112131415hk = pd.read_csv('香港2022疫情数据.csv')#...
C++源码运行
前言由于经常接触编译期,运行期,链接期,在此简单记录C++从源代码到可执行文件的过程 🧩 1. 预处理阶段(Preprocessing)时机:编译前,由预处理器执行任务: 处理 #include, #define, #ifdef 等指令 宏展开、条件编译、文件合并 结果:生成一个单一的、纯 C++ 源码文件(无宏、无包含指令)。 ✍️ 我的思考: 我们熟悉的头文件插入就是在这里完成的。 🛠️ 2. 编译阶段(Compilation)时机:预处理后,由编译器执行任务: 语法分析、语义检查(如类型检查) 每个 .cpp 文件编译为目标文件(.o 或 .obj) 生成机器指令,但尚未解析符号 结果:每个源文件变成一个目标文件 关键词:编译期错误(如语法错误、类型不匹配) ✍️ 我的思考: 类似于对代码做一遍检查,在把代码整理成指令串的同时看看有没有错误。 例如,对没有虚函数的类进行`dynamic_cast`就会在这里报错 🔗 3....
二叉树
二叉树概念满二叉树二叉树是是一种每个节点不断二分出左子节点和右子节点的树状数据结构,在算法竞赛中常常使用。 其优势在于,当二叉树的平衡性维护的较好(即左子节点的复杂度和右子节点的复杂度大致相仿)时,访问二叉树上的某个节点只需要$O(logN)$的时间复杂度,非常方便。 另外,二叉树比较适合完成从局部到整体的转变,从某个树上节点,一直向上追溯根节点并修改值,具有代表性的是线段树这一数据结构,修改子节点的值之后通过递归修改根节点的值。 但当二叉树不平衡时,访问某个节点的时间就会增加。极端情况下,一棵二叉树会退化成链表,此时访问的时间复杂度是$O(N)$ 我们用一个例题来看一下一棵满二叉树如何建成 P4715 【深基16.例1】淘汰赛 这里采用递归建树,按照题意不断把胜者放到根节点,得到最终结果。 递归建树是一种比较常见的方式,因为我们往往先拥有子节点,再依据子节点去更新根节点。 1234567891011121314151617181920212223242526272829#include<iostream>#include <vector>using...
Python基础:语法
谨以此博客记录入门Python的笔记 变量字符串12345name = " a "print(name)print(name.rstrip()) # 去除左侧空格print(name.lstrip()) # 去除右侧空格print(name.strip()) # 去除两侧空格 小数在python中,输出小数会碰到这样奇怪的事情:12print(3*0.1)输出:0.30000000000000004这与计算机计算浮点数的方法有关为解决这个问题,引入格式化输出 格式化输出12a =...
线段树详解
...
C++:虚函数和类型转换
虚函数类似于静态函数,类的成员函数也可以被定义为虚函数。1234class A{public: virtual void function(){}};定义为虚函数之后,编译器会被显式告知这是一个多态函数,将会在派生类中被重写。 多态的意思是,这个函数在基类和派生类当中是不一样的。通过基类对象和派生类对象调用出的函数不一样。 那么,这种写法和直接在派生类中重写一个同名函数有什么区别呢? 区别在于,假如是重写一个同名函数,调用如下: 1234567891011121314151617181920212223class A{public: void function(){ cout<<"A\n"; }};class B:public A{public: void function(){ cout<<"B\n"; }};int...
基本算法
二分法引入力扣209. 长度最小的子数组前缀和+二分查找 12345678910111213141516171819202122232425262728class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int n=nums.size(); vector<int>sum={0,nums[0]}; for(int i=1;i<n;i++){ sum.push_back(sum[i]+nums[i]); } int minLen=n,flag=0; for(int i=0;i<=n;i++){ int r=n,l=1; while(l<=r){ int m = r -...
C++:类的继承
...