01 2024 档案
摘要:走迷宫 思路: 从起点开始,往前走第一步,记录下所有第一步能走到的点,然后从所第一步能走到的点开始,往前走第二步,记录下所有第二步能走到的点,重复下去,直到走到终点。输出步数即可。 这就是广度优先遍历的思路。 AC代码: queue #include <bits/stdc++.h> #define
阅读全文
摘要:核心:局部最优->全局最优 例1:AcWing 905. 区间选点 思路: 1.将每一个区间右端点排序 2.枚举每一个区间,如果当前区间包含点,则之间pass,otherwise选择当前区间右端点 证明: 这里使用夹逼定理进行证明,后面的最大不相交区间和区间分组都是用的这个方式 Ans<=cnt证明
阅读全文
摘要:本质: string是C++风格的字符串,而string本质上是一个类 string和char*区别: char*是一个指针 string是一个类,类内封装了char,管理这个字符串,是一个char型的容器 特点: string类内部封装了很多成员方法 例如:查找find,拷贝copy,删除dele
阅读全文
摘要:用途: 1.给某个位置上数加一个数(单点修改)o(logn) 2.求某一个前缀和(区间查询)o(logn) #include <bits/stdc++.h> using namespace std; const int N=100010; int a[N],tr[N]; int n,m; int k
阅读全文
摘要:1.概念 内部结构图: 一.构造函数 二.容量和大小 三.插入和删除 四.数据存取 五.互换容器 匿名对象:当前代码执行结束系统立马回收 ****用途:收缩内存 六.预留空间
阅读全文
摘要:1.类模板 作用: 建立一个通用类,类中的成员 数据类型可以不具体制定,用一个虚拟的类型来代表 语法: template < typename T> 类 解释: template-声明创造模板 typename-表面其后面的符号是一种数据类型,可以用class代替 T-通用的数据类型,名称可以替换,
阅读全文
摘要:一.多态基本概念 多态多态可以分两类: 静态多态:函数重载和运算符重载属于静态多态,复用函数名 动态多态:派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定-编译阶段确定函数地址 动态多态的函数地址晚绑定-运行阶段确定函数地址 动态多态的满足的条件 有继承关系 子类重写
阅读全文
摘要:一.继承 普通实现: 继承实现: 总结: 继承好处:可以减少重复的代码 语法:class A:public B; A类也称为子类或派生类 B类也称为父类或基类 派生类中的成员,包含两大部分: 一类是从基类继承过来的,一类是自己增加的成员 从基类继承过来的表现其共性,而新增的成员体现其个性 二.继承方
阅读全文
摘要:一.目的: 让一个函数或者类访问另一个类中的私有成员 关键字:friend 友元的三种实现: 全局函数做友元 类做友元 成员函数做友元 1.全局函数做友元: 2.类做友元: 类外写成员函数必须在类的作用域下实现 3.成员函数做友元:
阅读全文
摘要:  ![i
阅读全文
摘要:一.深拷贝与浅拷贝 浅拷贝:简单的赋值拷贝操作 如果利用编译器提供的拷贝构造函数,会做浅拷贝操作 深拷贝:在堆区重新申请空间,进行拷贝操作 问题:如果浅拷贝带来的问题就是堆区的内存重复释放 解决:浅拷贝的问题要利用深拷贝来解决 析构函数作用:将堆区开辟的数据做释放操作 二.初始化列表 作用:C++提
阅读全文
摘要:一.成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上 空对象占用内存空间为:1 C++编译器会给每一个空对象也分配一个字节的空间,为了区分对象占内存的位置 每一个空对象也应该有一个独一无二的内存地址 静态成员变量,非静态成员函数,不属于类对象
阅读全文
摘要:N皇后 1.思路(1) 2.时间复杂度: DFS按行枚举 时间复杂度O(n!) 注:为了保证数组下标不为负,所以需要加一个偏移量(能映射过去就行) 3.AC代码: #include <iostream> using namespace std; const int N = 20; // bool数组
阅读全文
摘要:核心套路 优化一般就是优化状态转移方程 01背包 特点:每个物品仅能使用一次 重要变量&公式解释 f[i][j]:表示所有选法集合中,只从前i个物品中选,并且总体积≤j的选法的集合,它的值是这个集合中每一个选法的最大值. 状态转移方程 f[i][j] = max(f[i-1][j], f[i-1][
阅读全文
摘要:一. 构造函数的分类及调用 两种分类方式: 按参数分为:有参构造和无参构造 按类型分为:普通构造和拷贝构造 三种调用方式: 括号法 显示法 隐式转换法 二.拷贝构造函数调用时机拷贝构造函数调用时机 C++中拷贝构造函数调用时机三种情况 使用一个已经创建完毕的对象来初始化一个新对象 值传递方式给函数参
阅读全文
摘要:一.对象的初始化和清理 面对对象来源于生活,每一个对象都有初始设置以及对象销毁钱的清理数据的设置 二.构造函数和析构函数 C++利用上述俩个函数完成对象初始化和清理,这两个函数会被编译器自动调用,完成对象初始化和清理工作,如果我们不提供构造函数和析构函数,编译器会提供(编译器提供的构造函数和析构函数
阅读全文
摘要:优点1:将所有成员属性设置为私有,可以自己控制读写权限 优点2:对于写权限,我们可以检测数据的有效性 通过共有的函数来实现数据的读写
阅读全文
摘要:在C++中struct和class唯一区别在于默认访问权限不同 区别: struct 默认权限为公共 class 默认权限为私有
阅读全文
摘要:类和对象 C++面向对象的三大特性:封装,继承,多态 C++认为万事万物皆为对象,对象上有其属性和行为 一.封装 意义: 将属性和行为作为一个整体,表现为生活中的事物 将属性和行为加以权限控制 意义二: 访问权限有三种: 1.public 公共权限 (成员在类内可以访问类外可以访问) 2.prote
阅读全文
摘要:一.模板 概念: 就是建立通用的摸具,大大提高复用性 特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 c++提供两种模板机制函数模板和类模板 二.函数模板 作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表作用:建立一个通用函数,其函数返回值
阅读全文
摘要:一.函数默认参数 在c++中,函数形参列表中的形参是可以有默认值的 语法: 如果我们自己传入数据,就用自己的数据,如果没有,就用默认值 注意: 1.如果某个位置参数有默认值,那么从这个位置往后,从左往右,必须都要有默认值 2.如果函数声明有默认值,函数实现的时候就不能有默认参数。 (声明和实现只能有
阅读全文
摘要:一.引用的基本使用 作用:给变量起别名 语法:数据类型 &别名 = 原名 二.引用注意事项 引用必须初始化 引用在初始化后,不可以改变 三.引用做函数参数 作用:函数传参时,可以利用引用技术让形参修饰实参 优点:可以简化指针修饰实参 四.引用做函数返回值 注意: 1.不要返回局部变量的引用 2.如果
阅读全文
摘要:第一类: 运用在归并排序(两个指针分别指向不同序列) 第二类: 指向同一序列指向同一序列 用途(核心思想):优化 将朴素算法优化到o(n); 思路:先写暴力做法,然后看看i,j有没有单调关系,使时间复杂度优化成o(n)
阅读全文
摘要:1.一维差分(实质:前缀和的逆运算) 给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c 上述操作可以免去构造一个新数组,可以直接给差分赋值 2.二维差分 给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上C: S[x1, y1] +=
阅读全文
摘要:1.一维前缀和 S[i] = a[1] + a[2] + ... a[i] //求s[n] a[l] + ... + a[r] = S[r] - S[l - 1]//求l-r的序列和 2.二维前缀和 S[i, j] = s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+
阅读全文
摘要:1.整数二分 适用于有单调性的数列和部分没有单调性的数列 本质:通过一个性质把数列分成两个序列,然后找到分界点 注意:每一次循环后数组区间都会变成1,即你所查到的分界点 2.实数二分 因为没有整除的问题,每次区间都会严格减小一半 如果题目要求保留x位小数,则循环条件为r-l<1e-(x+2); 端点
阅读全文
摘要:注意: 函数的返回值不可以作为函数重载的条件 函数重载的注意事项 1.引用作为重载的条件 2.函数重载遇到函数默认参数
阅读全文
摘要:主要思想-分治 1.确定分界点 mid=(l+r)/2 下标中间值 2.递归排序 left right 3.归并 合二为一 排序算法的稳定性: 稳定是指原序列中两个数值相同的,在排序后位置不发生变化则称这个排序稳定(快排不稳定,归并稳定)
阅读全文
摘要:快排基本思想-分治快排基本思想-分治 1.确定分界点 X=q[l],q[(l+r)/2],q[r] 2.调整区间 第一个区间小于X,第二个区间大于X 3.递归处理左右两段,分别排好序 基本模板: 暴力做法:
阅读全文
摘要:1.代码区:存放函数体的二进制代码,由操作系统进行管理的! 2.全局区:存放全局变量和静态变量以及常量 3.栈区:由编译器自动分配释放,存放函数的参数值,局部变量等由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 存放的数据:函数参数 局部变量 4.堆区:由程序员分配和释放,若程序员不释
阅读全文