资源收集
这里放一些收集的资源链接,自取
电子书
Anna’s Archive:https://annas-archive.org 支持 libgen 和 Z-library
外刊
最好的在线杂志免费全部集中在一个地方。pdf可供下载,无需订阅即可随意选择大量类型。
freemagazines.top:https://freemagazines.top/
论文数据
国家哲学社会科学文献中心:https://www.ncpssd.org
国家哲学社会科学学术期刊数据库:https://www.nssd.org
中国知网:国内最大学术数据库,包括期刊、学位论文、统计年鉴等:https://epub.cnki.net/kns
万方数据,仅次于中国知网,包括期刊,学位论文等:https://www.wanfangdata.com.cn
人大复印资料:期刊、论文等:http://pub.exuezhe.com/index.html
维普:期刊、论文等:http://cqvip.com
国家统计局:https://www.stats.gov.cn
中国人民银行:https://www.pb ...
C可变参数函数
C可变参数函数
在做操作系统原理的实验时,发现了Linux Manual中有函数的原型定义是这样的:
#include <stdarg.h>int printf(const char *format, ...);
可以接受任意个参数,其中 ⋯\cdots⋯ 表示可变参数列表
int func(int, ... ) { . . .} int main() { func(2, 2, 3); func(3, 2, 3, 4);}
函数 func() 最后一个参数写成省略号,即三个点号(…),省略号之前的那个参数是 int,代表了要传递的可变参数的总数。
定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数。
在函数定义中创建一个 va_list 类型变量,该类型是在 stdarg.h 头文件中定义的。
使用 int 参数和 va_start() 宏来初始化 va_list 变量为一个参数列表。宏 va_start() 是在 stdarg.h 头文件中定义的。
使用 va_arg() 宏和 va_list ...
通过UMAF禁/启用XHCI
利用UMAF进入高级bios设置
注意 : 擅自修改可能会对电脑硬件造成不可逆转的损坏,请确保你明白你在干什么。
github链接
将文件考入移动介质,禁用电脑安全启动。
从BootManager中选择移动介质,进入以后将语言改为英文,不然会一堆菱形符号
下面是对XHCI的操作截图
IEEE754浮点数存储机制
最近在忙一些别的事情,实在来不及写博客了,只能先放一张图,等回头复习的时候再慢慢补充
运算符重载
Rational类
关键点:Rational是用来描述有理数的工具。
由于计算机对于浮点数存储机制的底层硬件局限,c++中的double无法准确的存储1/3,因此需要自定义Rational类来存储有理数,进行更加精确的运算。
另外,double类型可以表示的数据范围大于int类型,但是在精度上,double在表示大数时不如int类型。
运算符函数
关键点:运算符函数是类的成员函数,用于重载运算符。
指针及动态内存管理
动态持久内存分配
KEY POINT
new操作符可以在运行时为基本数据类型、数组和对象分配持久的内存空间。
另外,新版c++标准中可以用变量名称作为数组大小。
之前创建动态数组的方法
cout<<"Enter the size of the array: ";int size;cin>>size;int* list = new int[size];
就可以被替换为:
cout<<"Enter the size of the array: ";int size;cin>>size;int list[size];
创建及访问动态对象
关键点:调用对象的构造函数可以动态的创建对象,语法是 new ClassNmae(arguments)
可以使用如下的语句在堆中动态创建对象:
ClassName* pObject1 = new ClassName(); //这里使用无参构造函数创建对象,并将对象赋予指针pObject1ClassName* pObject2 = new ClassName(argum ...
C++ STL 顺序性容器 vector
基本概念和介绍
vector和数组非常相似,不同的是数组所申请是静态空间,也就是说数组的长度在数组定义的时候就已经确定下来了,但是vector可以进行动态分配,随着元素的插入和删除,vector的长度也会随之改变。节省了空间。
#include<vector>
常见的操作
先说一下什么是API,API就是应用程序编程接口(Application Programming Interface),说得更加通俗易懂一些,别人编译好的程序,提供给你使用,就叫做API。你使用了别人代码(或者程序)中的某个函数、类、对象,就叫做使用了某个API。
有些函数,要传入的不仅是普通的参数,你还要传入对应的: 迭代器,所谓迭代器,就是一种泛化的指针,因为指针本身就是一种迭代器,像下面讲解的insert()函数中要传入的v.begin()就是一种迭代器,以及在PrintVector打印输出中,也需要使用到迭代器,此处不做过多详解;
void PrintVector(vector<int>& v){ for (auto x : v) { cout < ...
C++ STL
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
组件
标题
容器(Containers)
容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法(Algorithms)
算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
迭代器(iterators)
迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。
这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。
Containers 容器
什么是容器
容器,是可以承载,包含元素的一个器件,可以理解为平时所用的容器,但是容器内装的是数据而不是固体或者液体。
STL中各大容器的结构与分类
顺序性容器
容器
说明
vector
可变大小数组。相当于数组,可动态构建,支持随机访问,无头插和尾插,仅支持inset插入,除尾部外 ...
algorithm头文件函数全集——史上最全,最贴心
简介:
algorithm头文件是C++的标准算法库,它主要应用在容器上。 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性。 因此,任何数据结构都能使用这套算法库,只要它具有相应的迭代器类型。
常用函数:
一、max()、min()、abs()函数
max():求两个数最大值
min():求两个数最小值
abs():求一个数的绝对值
代码:
#include<iostream>#include<algorithm>using namespace std;int main() { int a = 3, b = 4; //求最大值 int Max = max(a,b); //求最小值 int Min = min(a,b); //求绝对值 int Abs = abs(-3); cout << Max << Min << Abs; return 0; }
输出:433
注意:
1、max()和min()函数中的参数只能是两个,如果想求3个数 ...
Prim算法(普里姆算法)详解
prim算法(普里姆算法)详解
了解了什么是最小生成树后,本节为您讲解如何用普里姆(prim)算法查找连通网(带权的连通图)中的最小生成树。
普里姆算法查找最小生成树的过程,采用了贪心算法的思想。对于包含 N 个顶点的连通网,普里姆算法每次从连通网中找出一个权值最小的边,这样的操作重复 N-1 次,由 N-1 条权值最小的边组成的生成树就是最小生成树。
那么,如何找出 N-1 条权值最小的边呢?普里姆算法的实现思路是:
将连通网中的所有顶点分为两类(假设为 A 类和 B 类)。初始状态下,所有顶点位于 B 类;
选择任意一个顶点,将其从 B 类移动到 A 类;
从 B 类的所有顶点出发,找出一条连接着 A 类中的某个顶点且权值最小的边,将此边连接着的 A 类中的顶点移动到 B 类;
重复执行第 3 步,直至 B 类中的所有顶点全部移动到 A 类,恰好可以找到 N-1 条边。
举个例子,下图是一个连通网,使用普里姆算法查找最小生成树,需经历以下几个过程:
图 1 连通网
将图中的所有顶点分为 A 类和 B 类,初始状态下,A = {},B = {A, B, C, D, S, T}。
从 ...
克鲁斯卡尔算法(Kruskal)详解
应用场景-公交站问题
看一个应用场景和问题:
某城市新增 7 个站点 (A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通
各个站点的距离用边线表示 ( 权 ) ,比如 A – B 距离 12 公里
问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短 ?
克鲁斯卡尔算法介绍
克鲁斯卡尔 (Kruskal) 算法,是用来求加权连通图的最小生成树的算法 。
基本思想 :按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路
具体做法 :首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止
克鲁斯卡尔算法图解说明
以城市公交站问题来图解说明 克鲁斯卡尔算法的原理和步骤:
在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。
例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。
克鲁斯卡尔算法图解
以上图G4为例,来对克鲁斯卡尔进行演示(假设,用数 ...
KMP算法详解
KMP 解法
KMP 算法是一个快速查找匹配串的算法,它的作用其实就是本题问题:如何快速在「原字符串」中找到「匹配字符串」。
在朴素解法中,不考虑剪枝的话复杂度是 O(m∗n) 的,而 KMP 算法的复杂度为 O(m+n)。
KMP 之所以能够在O(m+n) 复杂度内完成查找,是因为其能在「非完全匹配」的过程中提取到有效信息进行复用,以减少「重复匹配」的消耗。
你可能不太理解,没关系,我们可以通过举个例子来理解 KMP。
1. 匹配过程
在模拟 KMP 匹配过程之前,我们先建立两个概念:
前缀:对于字符串 abcxxxxefg,我们称 abc 属于 abcxxxxefg 的某个前缀。
后缀:对于字符串 abcxxxxefg,我们称 efg 属于 abcxxxxefg 的某个后缀。
然后我们假设原串为 abeababeabf,匹配串为 abeabf:
我们可以先看看如果不使用 KMP,会如何进行匹配(不使用 substring 函数的情况下)。
首先在「原串」和「匹配串」分别各自有一个指针指向当前匹配的位置。
首次匹配的「发起点」是第一个字符 a。显然,后面的 abeab 都是匹配 ...
c++运算符优先级归纳
C++一共有 18个优先级,运算中按优先级进行性计算,当优先级相同时,根据结合性规则来决定。
结合性:
1.从左到右(L-R):操作数和操作符结合的顺序大部分是从左到右结合性的,例如()、单独的算术运算符
2.从右到左(R-L):最典型的是赋值运算符,当赋值符号与算术运算符结合后 ,整体也是R-L。另一个最常用的就是逻辑非运算符 “!”。
在使用的时候,如果不确定,或者运算符太多,就按照自己的思路用括号隔开。
因为在程序中,正确性>可读性>简洁性,万万不可本末倒置
优先级1
优先级2
平时常用的最高优先级操作符是从左向右结合的一批操作符,操作数和操作符结合的顺序是从左到右。包括:函数调用、数组下标、取成员、类型转换、后置运算符等。
优先级3
此优先级都是一元运算符(单目运算符),从右向做结合。
优先级4
类成员指针运算符
优先级5
算术运算符中的乘(*)、除(/)、取余(%)
优先级6
算术运算符中的加、减
优先级7
移位运算符
优先级8
比较运算符
优先级9
比较运算符
优先级10、11、12
按位运算符
优先级13、14
逻辑 ...
指向常量的指针和常量指针
指向常量的指针
指向常量的指针,即 pointer to const,即指针指向的是一个常量,你应该把这个词(指向常量的指针)当做一个整体来理解,而不是分开。(当然也有翻译成指针常量的,但我并不喜欢这种翻译方式)
通常也将指针本身是一个常量称为顶层 const,将指针所指的对象是个常量称为底层 const
它的语法格式是 const 在 * 左边,这一点很重要,因为后面要讲的常量指针是 const 在 * 的右边。下面是它的基本语法格式
const double pi = 3.14; // pi 是一个常量const double *cptr = π // cptr 是一个指向常量的指针// 或者,它的另一种写法是交换一下 const 和 double 的位置顺序double const *cptr = π // cptr 是一个指向常量的指针
下面我们举一个例子来进行具体的讲解
#include <iostream>using namespace std;int main(){ const double pi = 3.14; ...
留园现场课笔记
因为本来就是苏州人,暑假有时间可再次造访留园,所以这次没有去留园,听直播课讲解以后的一些心得体会。
园林的空间体验,不会一下看清空间是什么,在第一次空间体验中无法感受到空间的全貌。需要通过两次甚至三次的重复体验才能够感受到完整的空间。
在感受空间的过程中,设计者往往会给出一些线索,比如露出影子的树,去引导你的游览路线。墙上的窗形成的孔隙也是一种线索,通过孔隙将园林中的景观和空间相互联系,同时孔隙之间还会产生联系,在极小的空间内营造出极为丰富的空间体验。
z字型转折,廊道,在功能上毫无用处。但是,这种“无用”的转折可以营丰富且拥有深度的空间。有的转折会漏出两个孔洞,空洞之间会有一个对话的关系。园林有很多曲折的廊道,求曲而不求直,曲折的意义,通过一个转折漏出了空间空隙,并且在孔隙中形成了空间景观。
廊道与柱子构成了虚的空间划分,将廊道和转折所构成的景观分割成了对立空间,从而产生了一种距离感,景不是让你游的,而是让人远离景观去远观画的。同时,空间光线的巧妙安排使得景物一边有自然光线渗入,而人所在的廊道较暗,形成了景物在舞台上,人在观众席上的感觉,进而形成人与景的对话关系。
古木交柯,在空间 ...
对于中国古典园林,在阅读中国古典园林分析的基础上的一些个人见解与看法
中国古典园林的发展经历了漫长的时光。周、汉时期,古典园林主要是皇家苑囿,规模很大,但是属于圈地性质。秦汉时期出现过人工开池、堆山活动,但是造园的主旨、意趣依然很淡薄。到了魏晋南北朝时期,初步确立了再现自然山水的基本原则,把园林主要作为观赏艺术来对待。隋唐五代,由于文人直接参与造园活动,从而将造园艺术与诗画相联系,有助于在园林中创造出诗情画意的境界。宋代,对自然美的认识更加深刻,出现了山水画的理论著作,进一步推动园林的发展。
从园林的分布来看,造园活动的选址大多都在经济比较繁荣的地区或者是郊外安静的地区,这些地区都有山或者水或者二者兼有。文人工匠利用自然界的山水,在市井中营造一个小自然。
西方的古典园林设计受到一定程度上当时对于比例尺度的推崇,这种理性主义反映在园林中则是利用几何图形进行园林的规划设计。而中国的古典园林,从发展历程不难看出,很大程度上受到了当时文人墨客的影响,他们将书画诗等高雅艺术形式融入造园活动中,反映的是人的趣味,气质。
与其他中国古典建筑不同的是,古典园林在构图上取消了中轴线,在中国古典园林中很难看到左右对称的布局形式。其次,古典园林对待周围环境的态度不同,我认为这 ...
天津五大道历史背景
五大道是人们对天津英租界在墙子河外的推广界的俗称,是位于天津市市中心偏南,今属和平区的一片民国年间形成的高级住宅区。
五大道
1903年被划为天津英租界的推广界后,开始结合海河疏浚工程,填筑原有的沼泽洼地,到1920年代陆续建造大片洋房,成为天津最高档的住宅区之一,曾吸引不少民国初年的军政工商各界要人入住。现在,五大道已成为天津最知名的观光景点之一,那些风格各异的欧陆风情小洋楼,使这里成为天津的“万国建筑博览会”。
历史
这片地区东西方向有六条马路:马场道(原马厂道)、睦南道(原香港道)、大理道(原新加坡道)、常德道(原科伦坡道)、重庆道(河北路以东为原剑桥道;河北路以西为原爱丁堡道)、成都道(原伦敦道)。2011年,五大道根据历史街区保护规划,被天津市规划局确定为五大道历史文化街区。2013年,天津五大道近代建筑群中的39处代表性建筑被中华人民共和国国务院批准为全国重点文物保护单位。2015年4月,天津市五大道历史文化街区入选住房城乡建设部、国家文物局公布的第一批中国历史文化街区。
19世纪末20世纪初,五大道地区为天津城南部的一片坑洼塘淀。其间散落着一些简陋民居,当时有“二十 ...
论文参考数据来源
国家哲学社会科学文献中心:https://www.ncpssd.org
国家哲学社会科学学术期刊数据库:https://www.nssd.org
中国知网:国内最大学术数据库,包括期刊、学位论文、统计年鉴等:https://epub.cnki.net/kns
万方数据,仅次于中国知网,包括期刊,学位论文等:https://www.wanfangdata.com.cn
人大复印资料:期刊、论文等:http://pub.exuezhe.com/index.html
维普:期刊、论文等:http://cqvip.com
国家统计局:https://www.stats.gov.cn
中国人民银行:https://www.pbc.gov.cn
财政部:https://www.mof.gov.cn
国研网(国务院发展研究中心):https://www.drcnet.com.cn
中经网(国家信息中心):https://www.cei.gov.cn
中经网统计数据库:https://db.cei.gov.cn
中经网产业数据库:https://cyk.cei.gov.cn
世界经济数据库:https ...
LaTeX排版系统介绍
前言:排版工具与书写工具的讨论
LaTeX是一种“非所见即所得”的排版系统,用户需要输入特定的代码,保存在后缀为.tex的文件中,通过编译得到所需的pdf文件.
例如以下代码:
\documentclass{article}\begin{document}Hello, world!\end{document}
最后输出的结果是一个pdf文件,内容是”Hello, world!“。
如何理解“非所见即所得”呢?在这里举个“所见即所得”的例子:Word。Word的界面就是一张A4纸,输入的时候是什么样子,最后呈现出来就是什么样子。这给了我们极高的自由度,也非常容易上手,但是有如下问题: - 对于对细节不敏感的用户,Word的排版常常会在细节存在问题,比如两段话之间行间距不同、字体不同、标题样式不同等; - 对于撰写论文的用户,Word的标题、章节、图表、参考文献等无法自动标号,也很难在正文中引用; - 对于有公式输入需求的用户,Word自带的公式不稳定,而公式插件效果常常不好。
相比之下,使用LaTeX进行排版,就像是在铺好的 ...
LaTeX数学公式的输入
这里列出了部分需要注意的LaTeX数学公式输入方法
行内公式
行内公式通常使用$..$来输入,这通常被称为公式环境,例如:若a>0a>0a>0,b>0b>0b>0,则a+b>0a+b>0a+b>0.
若$a>0$,$b>0$,则$a+b>0$.
公式环境通常使用特殊字体,并且默认为斜体。需要注意的是,只要是公式,就需要放入公式环境中。如果需要在行内公式中展现出行间公式的效果,可以在前面加入\displaystyle,例如:设limn→∞xn=x\displaystyle\lim_{n\to\infty}x_n=xn→∞limxn=x.
设$\displaystyle\lim_{n\to\infty}x_n=x$.
行间公式
行间公式需要用$$…$$来输入,笔者习惯的输入方式如下:若a>0a>0a>0, b>0b>0b>0, 则
a+b>0.a+b>0.
a+b>0.
若$a>0$, $b>0$, 则$$a+b>0 ...