cmake之编译多个目录、多个源文件
多个目录,多个源文件现在进一步将 MathFunctions.h 和 MathFunctions.cc 文件移动到 math 目录下。
123456789./Demo3 | +--- main.cc | +--- math/ | +--- MathFunctions.cc | +--- MathFunctions.h
对于这种情况,需要分别在项目根目录 Demo3 和 math 目录里各编写一个 CMakeLists.txt 文件。为了方便,我们可以先将 math 目录里的文件编译成静态库再由 main 函数调用。
根目录中的 CMakeLists.txt :
123456789101112131415161718# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息project (Demo3)# 查找当前目录下的所有源文件# 并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS) ...
cmake之编译多个源文件
多个源文件现在假如把 power 函数单独写进一个名为 MathFunctions.c 的源文件里,使得这个工程变成如下的形式:
1234567/Demo2 | +--- main.cc | +--- MathFunctions.cc | +--- MathFunctions.h
这个时候,CMakeLists.txt 可以改成如下的形式:
12345678# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息project (Demo2)# 指定生成目标add_executable(Demo main.cc MathFunctions.cc)
唯一的改动只是在 add_executable 命令中增加了一个 MathFunctions.cc 源文件。这样写当然没什么问题,但是如果源文件很多,把所有源文件的名字都加进去将是一件烦人的工作。更省事的方法是使用 aux_source_directory 命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。其语法如下:
1aux ...
cmake之编译单个源文件
单个源文件假设现在我们的项目中只有一个源文件 main.cc ,该程序的用途是计算一个数的指数幂。
1234567891011121314151617181920212223242526272829303132333435363738#include <stdio.h>#include <stdlib.h>/** * power - Calculate the power of number. * @param base: Base value. * @param exponent: Exponent value. * * @return base raised to the power exponent. */double power(double base, int exponent){ int result = base; int i; if (exponent == 0) { return 1; } for(i = 1; i < exponent; ++i)& ...
MyBatisPlus之条件构造器
条件构造器Wapper
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
AbstractWrapper注意:以下条件构造器的方法入参中的 column 均表示数据库字段
ge、gt、le、lt、isNull、isNotNull12345678910@Testvoid testDelete() { QueryWrapper<User> queryWrapper = new QueryWra ...
MyBatisPlus之CRUD
CRUDinsert插入操作123456789101112131415// 添加操作@Testvoid testInsert() { System.out.println("--------insert--------"); User user = new User(); user.setAge(18); user.setEmail("123@123.com"); user.setName("haha"); int result = userMapper.insert(user); //影响的行数 System.out.println("result:" + result); //id自动回填 System.out.println(user);}
控制台输出:
12result:1User(id=1263011719026946049, name=haha, age=18, email=123@123.com)
注意:数据库 ...
MyBatisPlus入门
入门创建并初始化数据库创建数据库:demo_mybatis_plus
创建user表并加入数据:
123456789101112131415DROP TABLE IF EXISTS user;CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id));INSERT INTO user (id, name, age, email) VALUES(1, 'Jone', 18, 'test1@baomidou.com'),(2, 'Jack', 20, ...
MyBatisPlus简介
简介MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
支持 Ac ...
GDB基本使用
gdb123456789101112131415161718192021#include <stdio.h>int func(int n) { int sum = 0, i; for(i = 0; i < n; i++) { sum += i; } return sum;}int main(int argc, char *argv[]){ int i; long result = 0; for (i = 0; i <= 100; i ++) { result += i; } printf("result[1-100] = %ld n", result); printf("result[1-250] = %d n", func(250)); return 0;}
编译生成可执行文件:
1cc -g tst.c -o tst
gdb:
12345678910111213141516171819202122232 ...
9.图的连通性
连通图与连通分量
连通图:无向图中,如果顶点$V_1$到$V_j$都有路径,则称$V_i$和$V_j$是连通的。如果图中任何两个顶点都是连通的,则称G为连通图。
连通分量:无向图G的极大连通子图称为G的连通分量。极大连通子图的意思是:该子图是G连通子图,如果再加一个顶点,该子图不连通。
对于连通图,则其连通分量就是它自己,对于非连通图,则有两个以上连通分量。
强连通图和强连通分量
强连通图:有向图中,如果任何两个顶点$V_1$到$V_j$都有路径,且$V_j$到$V_i$也有路径。则称G为强连通图。
强连通分量:有向图G的极大强连通子图称为G的强连通分量。极大连通子图的意思是:该子图是G的强连通子图,如果再加入一个顶点,该子图不再是强连通的。
(a)是强连通图,(b)不是强连通图,(c)是(b)的强连通分量
无向图的桥与割点
如图,去掉边$(5,8)$后图分裂成两个互不连通的子图,边$(5,8)$即为图G的桥。同样边$(5,7)$也为图的桥。
如果去掉无向连通图G中的一条边e,G分裂为两个不连通的子图,那么e为G的桥或割边。 如图5号节点即为图G的割点。
如果去掉无向 ...
8.图的搜索
深度优先搜索深度优先搜索(Depth First Search,DFS),是最常见的图搜索方法之一。深度优先搜索沿着一条路径一直走下去,无法行进时,回退回退到刚刚访问的结点,似不撞南墙不回头,不到黄河不死心。深度优先遍历是按照深度优先搜索的方式对图进行遍历。
后被访问的顶点,其邻接点先被访问。
根据深度优先遍历秘籍,后来先服务,可以借助于栈实现。递归本身就是使用栈实现的,因此使用递归方法更方便。
算法步骤:
初始化图中所有顶点未被访问。
从图中的某个顶点v出发,访问v并标记已访问;
依次检查v的所有邻接点w,如果w未被访问,则从w出发进行深度优先遍历(递归调用,重复2—3步)。
基于邻接矩阵的DFS算法查找每个顶点的邻接点需要$O(n)$时间,一共n个顶点,总的时间复杂度为$O(n^2)$,使用了一个递归工作栈,空间复杂度为$O(n)$。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 ...






