C++笔记
Static关键字作用基本概念
使用目的:
在 C++ 中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见时,可将其定义为静态数据。
存放位置
DATA 段(全局初始化区)存放初始化的全局变量和静态变量;BSS 段(全局未初始化区)存放未初始化的全局变量和静态变量。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
使用static的优势:
可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。即静态全局变量不能被其它文件所用;其它文件中可 ...
开发杂记
开发杂记C++笔记指针vs引用复制构造函数函数指针多线程Thread的join函数方法
前缀和与差分
前缀和一维前缀和主要思想:
求[l, r] l到r之间的和,比方说从第二个到五个数的总和可以表示为,前5个数的总和减去前一个数的总和:s[l~r] = s[r] - s[l - 1],s为到第i个数的总和
默认s[0] = 0,来统一计算方式(节省了个if)
123456789101112131415161718192021222324252627#include <iostream>#include <vector>#include <algorithm>using namespace std;const int N = 1e6 + 10;int n, m;int a[N], s[N];int main(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int i = 1; i <= n; ++i) s[i ...
游戏编程
游戏编程SFML C++ 项目5.3.2 UE build报错UE 5.3.2 错误解决合集UE 5.3.2 知识记录离线本地Unreal Engine文档UE Niagara特效记录
二分算法
整数二分本质:
如果有单调性的话,可以二分;但二分的题目,不一定一定要单调性;所以本质不是单调性
在一个区间内,我们定义了一个性质,这个性质左半边满足,右半边不满足,可以将区间一分为二;二分可以寻找边界
主要思想:
以红色区域为True,找分界点(以红色的边界点为分界点)
找到中间值(mid = (l + r + 1)/2)
查看中间值性质(在左半边还是右半边):
a. [mid, r] mid处于左半边,所以分界点一定处于这里(mid到 r,包括mid)
b. [l, mid - 1] mid处于右半边,所以分界点处于左半边 (因 此时 r = mid - 1所以mid需要在之前+1来保证它概括到红色右边 界:mid = (l + r + 1) / 2, 且当情况为 l = r - 1 时,l经过操作还是 l = (l + r) / 2向下取整,还是l,死循 环)
以绿色区域为True(以绿色的边界点为分界点)
mid = (l + r ) / 2
查看中间值性质
a. [l, mid], inclusive
b. [mid + 1, r] 因mid为Fa ...
代码刷题
代码刷题排序算法二分算法前缀和与差分C++面试准备DFS和BFS
SIG grad tech面试的分享
面试流程:
面试内容
总结:
在参加完women’s discory day之后,收到了SIG tech面的邀请(也就是继oa,phone interview,event day后,倒数第二轮的面试),在预约好时间之后,便迎来了痛苦tech面。
面试流程:
提前十五分钟进面试链接。这是因为他们会需要你提前读题,有解题思路,一定要仔细看邮件,不要掐点进去了,那就是妥妥浪费自己机会和时间[doge]
俩面试官会分别自我介绍,讲自己所在团队,和负责内容。在他们说的时候最好仔细听,可以将感兴趣或疑问的点记下,在最后提问环节就可以提出紧密相关的问题以表示对他们团队和公司的兴趣。
之后便是自我介绍,讲下学校背景,擅长的编程语言合作过的项目,最好挑重点的说保持精简,因为面试官们需要把控编程和技术提问的时间,如果想展示擅长的技术,最好将时间留给后面提问互动。
ice break结束,考官会问“有没有把题目看了”,有的话便会让你讲下解题思路,其中会包括你要用什么数据结构,整体的逻辑处理。他们也会给些建议,比方提醒你考虑数据结构的时间和空间复杂度(只是提醒,肯定不会明确说)。同时,他们会很人性地 ...
排序算法
Quick Sort快排 (nLogn)主要思想为:
确定分界点
取左边界
取中间值
取右边界
或随机
划分区间 (最重要,最难的部分,有很多种实现方法)
让一个区间都 <=x
让另一个区间都 >=x
递归
递归地给左右或那俩区间排序
拼接
将排好序的左右俩边合并一起
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void quick_sort(int q[], int l , int r){ if (l >= r) return; int x = q[l + r >> 1], i = l - 1, j = r + 1; // define x, 俩指针 while (i < j) { do ...