
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
不定义是因为该函数根本不会调用,定义了其实也没有什么意义,不写反而还简单,而且如果定义了就做不到防止成员函数内部拷贝了。

连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树就不再连通;中取出权值最小的一条边 ( 若有多条任取其一 ) ,若该边的两个顶点来自不同的连通分量,则将此边加入到 G。算法也是常用的最小生成树算法。两种算法其实在效率是差不多的,只不过实现的方式是不一样的,具体问题具体分析!来判断,每次将选择的边对应的邻接顶点加入到并查集中,然后每次新增边的时候。具体实现的

记忆化搜索就是一个带 ”备忘录“ 的递归(暴搜、深搜)。动态规划、记忆化搜索、带备忘录的递归,本质都是同一个东西,本质都还是暴力搜索,只不过做了优化!不是所有的递归都能转化为记忆化搜索的,记忆化搜索只适用于出现了大量重复的问题!递归和记忆化搜索,为动态规划解题又多开辟了一条思路,我们可以通过递归和记忆化搜索,想办法转化为动态规划!但并不是所有问题根据这样子转化都会很方便,有可能常规的动态规划(也就

CAS是一种常见的原子操作,也称为“比较-交换”操作,是一种比较后数据若无改变则交换数据的一种无锁操作(乐观锁)。用于实现多线程或多进程并发访问共享资源的原子性操作。CAS操作通常有三个参数:共享变量的内存地址、期望值和新值。CAS操作首先比较共享变量的值是否等于期望值,如果相等,则将共享变量的值替换为新值;如果不相等,则不执行任何操作。在这个过程中,CAS操作具有原子性,即其他线程或进程无法同

我们知道,一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护。最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。但随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升,一个人已经 hold 不住了,就开始出现了精细化分工。如下图所示:但在传统的 IT组织下,开发团队(Dev)和运维团队(Ops开发团队(尤其是敏捷

存储数据用文件就可以了,为什么还要弄个数据库❓❓❓文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便什么意思呢,比如说我们如果用普通文件作为数据库的话,那么就会有访问控制、数据加密、完整性保护、备份和恢复、病毒和恶意软件等安全性问题的存在;或者说此时有一大批数据,比如说有几万条IP地址,那么如果我们想筛选出以192开头的IP地址,对于普通文件来说我们就得用编程

左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址或者可以对它赋值,左值可以出现在 =的左边,右值不能出现在 =表达式左边。定义时 const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。简单的说,能取地址的就是左值!(虽然 C++11将 const修饰的变量认为虽然不能修改值,但是它还是能修改地址的,所以将常量视为左值int

之前对 mapmultimapsetmultiset其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此mapset等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。注意:因为 map和 set主要是用红黑树进行封装,所以这里的 AVL树我们主要是实现它的插入和删除和

邻接矩阵和邻接表是相辅相成的,各有优缺点,要根据实际情况进行选择,有时候也可以一起使用他们进行搭配!一般情况下,对于稠密图,我们选择邻接矩阵;对于稀疏图,我们选择邻接表!下面我们讲解各种算法的时候,采用的是邻接矩阵来实现,因为一般我们在做oj以及实现一些算法的时候,邻接矩阵会用的比较多~

单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址,也就是第 1 行第 0 个元素的地址,因为使用整行数据没有实际的含义,编译器遇到这种情况都会转换为指向该行第 0 个元素的指针;每一个一维数组又包含了 4 个元素,例如 arr[0] 包含 a[0][0]、a[0][1]、a[0][2]、a[0][3]。需要注意的是,字符数组 str 中存放的是字符串的首地址,不是字符
