自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 DijkSkra算法C++实现

2.每次从未加入final集合的顶点中选取一个到已求解集合中距离最短的顶点,加入集合(将final设为true)。最后更新源点到其他所有点的距离dist[],看:经过当前点到其他所有点的距离小,还是不经过当前点到其他点的距离更小,选取二者较小值;1.初始化:集合final为已经求解了最短路径的顶点集,初始时,将final[源点]设为true,其他都为false。集合dist[j]为源点到j的最短距离,集合path[j]为当前j走到顶点j的上一个顶点。此算法适用于单源最短路径求解。

2024-04-11 19:51:51 189 1

原创 常用排序算法及实现(C++)

同时算法时间复杂度取决于基准值的选取,当基准值选取较极端时,时间复杂度趋于O(n^2),当基准值选取合适,最优时间复杂度为O(nlogn).实现原理:基于分治思想,选取基准值,将基准值放在mid位置,基准值左边元素均小于基准值,右边元素均大于基准值。建堆过程:对于i层节点,每次下滑最多(h-1)层,下滑过程中对比次数不超过2*(h-i),累计所得为O(n);在直接插入排序中,当待排序列为正序时,时间复杂度为O(n).时间复杂度T(n)=O(n^2);时间复杂度T(n)=O(n^2);时间复杂度O(n^2)

2024-04-07 22:11:09 415 1

原创 记一次tomcat无法访问默认主页解决方案

1.在tomcat的bin目录下catalina.sh文件中,加入环境变量。提示如上错误,又去检查环境变量以及tomcat版本,发现均无错误。import JAVA_HOME="java安装目录"发现可以运行,但浏览器依然访问不了默认页面:8080。要去阿里云官网添加安全组,使其允许通过8080端口。然后执行startup.sh运行tomcat。打开tomact/logs/当天的log。2.运行startup.sh。3.添加防火墙允许通过的端口。网上也找不到相关的解决方案。执行shutdown.sh。

2024-01-11 19:06:01 907 1

原创 04.编译器优化与SIMD指令集

同理,编译器为了防止指针别名现象,会生成两份汇编代码(普通版和SIMD版本),然后进行指针做差运算判断有无指针别名现象,为了避免此操作造成的效率损失,也应加入__restrict关键字。局部可见函数static,使用此关键词声明,就不会将该函数暴露给其他函数,此时编译器优化后,压根就不会定义该函数,直接内联。对于非4的倍数,编译器也会自动进行边界特判。对于循环之中的判断语句,编译器会挪到外面,前提是判断语句在循环当中不会改变。对于连续的地址,两个32位的写入,编译器可以直接优化为一个64位写入。

2023-05-22 13:21:25 443

原创 03.模板元编程与函数式

模板函数-特化的重载;如果函数无参,编译器无法推断,此时应:add();//手动给定模板参数类型。

2023-05-14 16:51:26 75

原创 02.RAII与智能指针

std::move(v2) //不会清空v2,需要清空可以用v2={}(调用了默认构造函数或移动赋值函数)或v2.clear()std::unique_ptr p=std::make_unique();for_each(v.begin(),v.end(),func)//函数模板,对于每一个vi都调用func函数;std::as_const(v2)//不会拷贝v2,需要拷贝可以用{auto_=v2}v1=std::vector(200) //就地构造的v2。p=nullptr;

2023-05-11 20:15:33 93

原创 01.从CMake讲起

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。CMake 就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。

2023-05-08 22:42:54 254

原创 反转链表的两种实现

【代码】反转链表的两种实现。

2023-05-02 17:25:22 39

转载 LeetCode 206反转链表

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。输入:l1 = [7,2,4,3], l2 = [5,6,4]你可以假设除了数字 0 之外,这两个数字都不会以零开头。对于逆序处理,首先想到使用栈。输出:[7,8,0,7]

2023-05-02 17:07:05 85

原创 概率和数理统计

均匀分布随机数。

2023-01-11 22:40:13 183

原创 积分与微分

qudal(f,a,b) //f为函数句柄,a为积分下限,b为积分上限,精度更高。quda(f,a,b) //f为函数句柄,a为积分下限,b为积分上限。cumsum() //传入向量或矩阵,第二个参数可以指定维度。trapz() //传入向量或矩阵。

2023-01-11 14:48:33 123

原创 多项式与函数

poly2sym() //通过多项式的系数行向量从高到低降幂,建立多项式。poly() // 通过多项式的根建立多项式,返回值为系数向量。polyvalm(p,x) //以矩阵为计算单位,求值。polyval(p,x) //求多项式在x处的值。conv(a,b) //实现向量a,b卷积。roots(p) //求多项式的根。devconv(a,b) //除法。其中figure创建绘图窗口。

2023-01-10 17:08:20 125

原创 字符串操作

字符串查找:

2023-01-10 15:12:25 38

原创 数组和矩阵分析

A(A>10)=10 //将A中大于10的元素赋值为10。C=1:2:10 //从1到10,间隔2。矩阵同行用逗号分隔,不同行用分号分隔。D]//生成二维数组 2*5。find(A>5) //返回下标。注意:find返回的是元素下标。A(A>5) //返回元素。逻辑运算的好的结果为0和1。数组运算遵循矩阵运算规则。A>2 //返回逻辑数组。

2023-01-10 12:20:42 160

原创 1.3尽可能使用const

使用mutable修饰符,可以释放掉non-static成员变量的const约束,使得在const成员函数中,也可以对含有mutable修饰的成员变量进行修改。//C++中常成员函数与非常成员函数可以构成重载,具体调用根据对象类型是否为const来进行区别调用,对于常成员函数造成的重载,可以通过非常版本对另一个调用,来减少代码重复。先通过*this将对象变为常对象,以便调用常成员函数版本。通过const成员函数,来处理const修饰的对象。某些情况下允许在常成员函数下,对成员变量进行修改。

2023-01-09 21:48:20 48

原创 MATLAB基础

快速逻辑与&& //当第一个操作数为假,直接返回假,否则与&相同。快速逻辑或|| //当第一个操作数为真,直接返回真,否则与|相同。cell(i,j) //建立单元数组i*j。complex(a,b) //创建复数a+bi。logic() //将数值型转为逻辑型。abs(z) //得到复数z的模。angle(z)//得到z的角度。conj(z) //得到共轭复数。floor //取整小于等于。real(z) //取得实部。imag(z) //取得虚部。ceil //取整大于等于。fix //向0取整。

2023-01-09 13:21:34 66

原创 pair&map&multimap

vector和list等容器,插入元素,需要指定插入位置,所有关联容器不关心插入位置,只关心插入的key和value,由容器内部确定其位置。通过find()方法,传入需要访问的key,函数返回存在的key对应元素的迭代器,若不存在,则返回map的end()[]运算符永远执行成功,若指定的key不存在,插入新的pair;如果指定的键不存在,则lower_bound()和upper_bound()的返回值相等。提供的插入、删除、查找功能,都是基于key的,而value只是绑定于特定键的附带值。

2023-01-08 22:27:50 76

原创 1.2 尽量减少#define预处理器的使用

对于单纯常量,尽量使用const或enum。对于宏定义,尽量使用template inline函数。

2023-01-08 14:32:31 56

原创 1.1 语言联邦

Object-Oriented C++:包括classes(构造与析构),encapsulation(封装),inheritance(继承),polymorphism(多态),virtual(动态绑定)。STL:标准模板库,包括容器,迭代器,算法,函数对象。template C++:泛型编程。C:C语言的相关通用用法。

2023-01-08 13:53:16 85

原创 术语(规范及命名习惯)

同时进行对象传参时也需要注意此时会调用拷贝构造函数,对于含指针对象,防止浅拷贝析构后出现野指针和重复析构出现内存泄漏的情况。explicit关键词:在函数前添加,阻止被用于执行隐式类型转化(implicit type conversions).参数:lhs(left-hand side)、rhs(right-hand side)左手端、右手端。(含指针类型,需进行深拷贝)。指针:pa(point to any),any 可以是任何类型对象。extern关键词:显式表明在此处声明,在别的文件进行定义。

2023-01-08 13:40:09 55

原创 Hash表解决字符串匹配

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。通过数组模拟哈希表,先遍历后串,通过-'a'对串中字符计数,再遍历前串,相同时减去对应key的计数,若小于0则说明前串无法覆盖后串。链接:https://leetcode.cn/problems/ransom-note。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。如果可以,返回 true;否则返回 false。来源:力扣(LeetCode)

2022-12-30 23:40:31 236

原创 Matplotlib 基础

例:应用matplotlib绘制(0,0)至(6,100)直线 plt.plot(x,y,格式符代码,**kwargs)

2022-09-15 13:52:17 102

原创 C++异常处理

程序使用异常处理程序(exception handler)来捕获异常,异常处理程序位于要处理问题的程序中。处理程序以关键字catch开头,随后是位于括号中的类型声明,它指出了异常处理程序要响应的异常类型;try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。try块是由关键字体示的,关键字try的后面是一个由花括号括起的代码块,表明需要注意这些代码引发的异常。其中try块用于检测代码块,若发现异常则通过throw引发异常并标识异常(throw后面的值即为异常特征),指出异常语句。

2022-09-15 13:51:40 385

原创 python正则表达式

返回值:找到则返回目标的第一个字符串,可以用.span返回正则表达式在待匹配字符串中位置,找不到返回None。区间取反:^不会出现的字符定义字符组,加在正则表达式前则从头取反,加在某个字符后则意味着从某个字符开始取反。表示正向先行断言,整个括号里的内容(包括括号本身)代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配。重复区间:在不确定重复次数时可以使用重复区间{M,N},表示重复次数在M-N之间的都会被筛选。分组:可以在长的正则表达式中通过()来分组,通过group(index)来索引。

2022-08-21 13:50:14 293

原创 自由与平等在某种意义上是相互矛盾的

“自从法国大革命以后,全球人民逐渐同意“自由”,“平等”都是最基本的价值观。然而这两者根本就互相抵触!想要确保“平等”,就得限制住那些较为突出的人;而要人人都能“自由”,也就必然会影响所有人的平等。自从1787年法国大革命以来,全球政治史可以说就是讲述着要如何解决这种矛盾。”——人类简史...

2022-08-12 00:06:14 296

原创 再探C++中类继承问题:

1.关于类继承中对象指针的问题:首先,基类的指针和引用可以在不经过显式转换的情况下指向派生类的对象,但是却无法通过基类的指针调用派生类对象的非基类方法。但是,无法将派生类的指针指向基类对象,这种关系只是单向存在的。同理,c++的切片可以将派生类对象赋值给基类,此种关系也是单向存在的。2.虚函数的工作原理:首先,需要明确,C++存在将派生类引用或指针转化为基类引用或指针,这称为向上强制转化(upcasting), 这种特性,在一定程度上保障了为基类设计的函数可以完美的契合于派生类,但是在某个方面也可能会造成一

2022-07-13 18:00:18 241

原创 Linux 基础命令操作

chmod 修改操作文件/目录权限:参数如下:参数如下:例如:chmod u+x textfile#对目录操作可加 -R/--recursive 对目录下所有子文件进行相同操作chown 修改文件/目录所有者:chown 用户名/用户ID 文件名必须以root权限才能执行,如果是普通用户想执行时,需要在命令前加命令来提升权限为权限例:sudo chown Jh textfile..................

2022-07-07 19:53:08 360

原创 pandas基础操作

pandas数据结构series:Series类似与表格中的列,类似于一维数组,可以保存任意数据类型。Series由索引index和列组成生成series: pandas.Series(data,index=,dtype,name=,copy(T/F))// 也可使用字典来创建Series对象,省去建立索引的步骤DataFrame:DataFrame是一个表格型数据结构,含有一组有序的列,有行索引也有列索引生成DataFrame: pandas.DataFrame(data,index,columns

2022-07-06 17:19:22 425

原创 Numpy基础操作

创建数组对象:1.numpy.array([[list],[list]]) //返回多维矩阵2.numpy.arrange(start,stop,step,dtype) //返回一维数组,start默认为0,步长默认为13.numpy.zeros(shape) //返回多维矩阵,元素值为04.numpy.eye(m,n,k,dtype) //返回一个m*n多维矩阵,其中对角线元素为1,其余为0随机数类:5.numpy.random.random(shape) //返回无条件随机数矩阵6.nump

2022-07-05 12:38:47 624

原创 python对文件操作

文件打开模式:1.文件句柄 = open('文件路径‘,’操作模式‘)2.with open(’文件路径‘,’操作模式‘) as 文件句柄:#对于文件操作完后使用close()函数关闭文件 文件读取函数:1.read()读取全部内容,返回值为字符串2.readlines()函数读取全部内容,将其分解为大列表,其中元素以\n为分界3.readline()函数读取一行内容文件遍历操作:open()读需关闭文件,with open()可自动关闭open()无异常处理功能,with open()有异常处理功能ope

2022-07-02 18:01:28 1304

原创 python类继承

1.python子类初始化时不会对父类进行初始化,想使用父类中方法必须先对父类初始化 使用super函数 super(子类,self).__init__(父类参数1,父类参数2,父类参数3...)

2022-06-28 20:03:36 229

原创 python数据类型

1.在没有歧义的情况下,tuple允许不加括号进行初始化赋值。2.tuple中只有一个元素时,必须在元素后加逗号。3.元组元素只可读不可写,但其中元素可以为可修改的list。4.tuple(list)将列表转换为元组1.通过键来访问值.........

2022-06-28 18:05:07 315

转载 滑动窗口算法

例题 3. 无重复字符的最长子串难度中等给定一个字符串 ,请你找出其中不含有重复字符的 最长子串 的长度。class Solution {public: int lengthOfLongestSubstring(string s) { // 哈希集合,记录每个字符是否出现过 unordered_set occ; int n = s.size(); // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始......

2022-06-07 17:43:04 80 1

原创 友元函数细节

1.为类重载二元运算符时(带两个参数的运算符),常常使用友元运算符,例如Time对象的乘法运算:与加减运算符不同的是,乘法运算符使用了两个不同的类型,由于左侧操作数为调用函数,若使用成员函数的话,乘法交换律将不复存在,例如 A=B*2.75成立,等价于 A=B.operator*(2.75);但 A=2.75*B将无法操作。故而想解决这个问题正确的方法是使用友元函数,且对*运算符进行重载,使得支持乘法交换律。对于非成员重载运算符函数来说,运算符表达式左边的操作数对应于运算符函数的第一个参数,运算

2022-05-18 16:41:04 81

原创 STL专题

STL专题

2022-05-17 13:18:23 201

原创 C++面向对象细节

1.模板函数不能作为虚函数,因为模板动态联编的特性决定了无法确定虚函数表的大小。2.子类的构造、析构函数会调用基类的赋值构造析、构函数处理基类的部分。3.如果在类声明中定义了方法(内联定义)则可省去函数头的模板。4.子类成员与父类重名时,会覆盖父类。..................

2022-05-13 14:02:35 41

原创 12.动态内存和类分配的问题

1.对于类成员为字符串类型的,在类声明使提供字符串指针而并非数组,意在便于后续初始化和调用时,通过new运算符,实现可变长度(也可直接使用string类)。2.初始化在cpp文件中,而不是在类声明文件,因为类声明位于头文件中,后续可能多次调用,防止出现多个初始化语句副本,而引发错误。(但对于const静态成员和枚举类型例外,可直接在类声明中初始化)。类声明中不分配内存,仅描述内存如何分配。3.慎重将对象作为函数参数,自动生成的拷贝构造函数为浅拷贝,易造成内存泄漏的问题,需重载拷贝构造函数。4.如

2022-05-13 12:40:25 50

原创 c++11特性解析

仅当lambda表达式完全由一条返回语句组成时,自动推导才有效,否则,需使用新增的返回类型后置语法:[] (double x)->double{int y=x; return x-y;};

2022-05-09 19:17:27 36

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除