文章分类 - c++
主要是c++相关的一些知识点
摘要:描述 思路 这里首先要明确二分图是一种什么类型的图,二分图的定义是图中所有的节点被分为两个部分,两部分之间的节点可以存在边,但是两个部分的内部不能存在连边。 这里可以看成是一个染色的问题,把图中所有的节点进行广度优先遍历,每一层的节点染成不同的颜色,然后统计两种颜色的节点的个数,最后两者相乘,减去现
阅读全文
摘要:描述 思路: 这里首先可以使用一个二维数组来记录二叉树的结构,使用广度优先遍历的思路来找到全部的快乐节点,为了避免重复遍历,这里使用一个vector容器来记录已经遍历的节点,为了避免遍历的过多,使用一个变量来记录遍历的次数,当广度遍历的次数已经到达距离m的时候,就停止遍历,输出遍历到的数据节点。 代
阅读全文
摘要:描述: 思路: 根据题意,每一次卖出的商品应该是滞留队列中价值价值最大的物品,这里的滞留队列应该就是m的大小,因此可以用一个优先级队列来保存每天滞留的物品。 这里可以定义一个结构体包保存当前的天数以及天数对应的滞留价值。每次取出天数最小且滞留价值最大的物品。 代码: #include <bits/s
阅读全文
摘要:1.概念 通俗来说,多态就是函数调用的多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的动作和结果。在继承关系中想要构成多态需要满足两个条件: 必须通过基类的指针或者引用调用虚函数;(如果直接使用对象本身,那么多态将无法实现,因为在编译时,编译器会根据对象的静态类型即声明时的类型
阅读全文
摘要:1.继承的概念 继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类称之为派生类。 // 一个简单的继承结构 class Person { public: // 还有一个打印方法 void Print() { cout << "n
阅读全文
摘要:1.内存分布 以32位计算机系统为例,内存地址分布从低地址到高地址依次是: .txt代码段 .rodata 常量段 .data 数据段,已经初始化的全局变量和静态变量 .bss 数据段,没有初始化的全局变量和静态变量,这里会默认给它初始化为0 .heap 堆区,程序员自己开辟内存空间,向上生长 内存
阅读全文
摘要:概念 如果一个类定义在另一个类的内部,则这个类被称为内部类 注意 内部类是一个独立的类,它不属于外部类,也不能通过外部类的对象去调用内部类 外部类对内部类没有任何优越的访问权限 内部类就是外部类的一个友元类,即内部类可以通过外部类的对象参数来访问外部类中的所有成员,但是外部类不是内部类的友元。 特性
阅读全文
摘要:友元分为友元函数和友元类,友元提供了一种突破类域封装的方式,提供了便利,但是也增加了耦合度,因此友元应该避免多用。 友元函数 友元函数可以直接访问类的私有成员函数,它是在了类外定义的普通成员函数,不属于任何类,但是需要在类的内部进行声明,同时要在前面加上friend关键字进行修饰。 // 重载输入输
阅读全文
摘要:概念 声明为static的类成员称之为类的静态成员,使用static修饰的成员变量称之为静态成员变量,使用static修饰的成员函数称之为静态成员函数。 特性 静态成员为所有的类对象所共享,并不属于某一个具体的类对象 class Test{ private: static int _a; }; in
阅读全文
摘要:c++中的构造函数不仅可以构造和初始化对象,对于单个参数的构造函数,还支持隐式的类型转换。 class Test{ public: Test(int a= 0 ):_a(a){} }; int main(){ Test t1 = 100; return 0; } 上述代码在语法上,等价于 Test
阅读全文
摘要:构造函数体赋值 通过类名创建一个对象的时候,编译器会通过调用类中的构造函数来给对象中的各个成员变量赋予一个合适的初始值。 class Test{ public: Test(int a,int b,int c){ _a = a; _b = b; _c = c; } int _a; int _b; in
阅读全文
摘要:C++的setw()函数 用于设置字段的宽度,它只对紧跟着的输出产生作用。 setw(n); 当后面的输出字段的宽度小于n的时候,默认在前面补空格;在输出字段的宽度大于n时,就直接正常输出。 这里也可以使用setfill()来设置使用其他的字符进行填充 同时也可以通过left、right来设置是左填
阅读全文
摘要:定义 回调函数是一种通过函数指针或者函数对象传递给另一个参数,并在特定事件或条件下被调用的函数。 举例 #include<stdio.h> //回调函数类型定义,函数对象的返回值、名字和参数 typedef void (*myCallback)(int); //执行计算的函数 void calcul
阅读全文
摘要:描述: 思想: 使用vector容器来模拟栈保证其进行动态的扩容,同时再使用一个vector容器来记录当前栈中的最大值,保证随着元素的进栈和出栈,栈中的最大值都能够正确的记录下来。这里的元素删除操作并不是真正的删除,而是通过对应的下标做调整,元素的清空操作也只是把元素的下标值变为0,其实里面的元素并
阅读全文
摘要:描述: 思想: 采用并查集的思想,使用vector容器保存最初始的对应关系,使用一个无序map表来进行合并操作。unordered_map<int, list>,其中key表示的是对应的元素值,value用一个list链表来保存对应的数组下标。 代码: #include <bits/stdc++.h
阅读全文
摘要:描述: 思想: 分别计算出中位数和平均数的大小,然后进行比较,这里为了避免小数带来的影响,统一对数据进行乘以n的操作。 代码: #include <any> #include <bits/stdc++.h> using namespace std; int main() { // 中位数:排序后位于
阅读全文
摘要:描述: 思想: 这里可以把该方程理解为,与a做或运算可以表示为将a中的某一位变为0或者不变,为了保持等式两边平衡,只能在a在二进制下为0的进制位进行操作,于此同时加上的也是对应的一个数。即统计a中为0的个数,然后做排列组合。 代码: #include <bits/stdc++.h> using na
阅读全文
摘要:描述: 思想: 这里就是一个递归的思想,不断的将x的值进行减少,直到满足条件,然后将对应下标的数组进行自增计算即可。 代码: #include <bits/stdc++.h> using namespace std; void getres(vector<int>& res,int x){ if(x
阅读全文
摘要:描述: 思路: 这里采用位运算的方式,让初始值为L,然后逐步来将这个初始值的每一位改为1,同时满足改为1后的值要小于等于R。 代码: #include <bits/stdc++.h> using namespace std; int main(){ long long q,l,r; cin >> q
阅读全文
摘要:描述: 思路: 采用滑动窗口的方式,先对数组进行排序,然后维持k范围的一个滑动窗口,如果条件满足,就返回当前窗口的最大值,如果条件不满足那就将当前的窗口向前移动一格,以此反复。 代码: #include <bits/stdc++.h> using namespace std; int main()
阅读全文

浙公网安备 33010602011771号