- 博客(51)
- 收藏
- 关注
转载 爬取以太坊上智能合约的Python爬虫
# -*- coding: utf8 -*-# SmartContactSpider.pyimport requestsfrom bs4 import BeautifulSoupimport tracebackimport reimport osimport timeimport datetimedef printtime(): print(time.strftim...
2019-11-22 19:02:36
2731
4
原创 马上七夕了程序员如何给爱人一个浪漫表白?
Cpp代码如下:#include <stdio.h>#include <math.h>#include <stdlib.h>int main() { float a, x, y; system("cls"); system("color 0C"); for(y = 1.5; y >-1.5; y -= 0....
2018-08-14 21:47:07
1150
1
原创 如何使用线性代数实现最小二乘法拟合曲线
也许在我们读高中的时候,就知道在数学的世界里,有一种直线拟合的方式:最小二乘法。它是一种数学优化技术,原理是通过最小化误差的平方和寻找数据的最佳函数匹配。比如研究x和y之间的关系,假设我们拥有的数据是将这些数据描绘在x-y直角坐标系中,发现这些点并没有能够连接成一条直线。但趋势近似一条曲线,这时可以假设这条曲线为: 。根据最小二乘的原理,使即最小化,可以得到值,再根据直线过点得出b...
2018-07-25 12:27:54
21271
1
原创 如何推导欧拉公式e^iθ=cosθ+i*sinθ
相信大多数人都知道大名鼎鼎的数学最美的公式:为什么说它是最美的呢?因为它包含了指数里最基本的e,复数里最基本的 i ,圆频率最基本的 π,以及自然数里最基本的0和1。本质上这个公式是由 这个公式推导过来的,把θ换成π即可。那么这个公式是如何得到的呢?可以使用高等数学里的幂级数展开,进而可以推导得出。把里的ix看成一个整体,根据麦克劳林展开式,把x换成ix代进去可以得到:...
2018-07-22 17:21:43
53120
2
原创 证明:在N维欧式空间中,两两互成钝角的非零向量不多于N+1个
证明的方法很简单,在讲证明之前,我们先来看一道题目:也许不知道这个定理的人,会选择“5个”,这很正常。答案解析:先取定一单位向量,则与它成钝角的向量只能落在某半空间中;从该半空间中取定第二个向量。则与这两个向量都成钝角的向量只能落在某(至多)四分之一空间中。而从这四分之一空间中至多再能取两个互成钝角的向量。如果觉得难理解的话:可以把空间想成八个块,上面四个象限,下面四个象限,这样稍微比...
2018-07-18 23:10:57
6401
2
原创 用栈进行表达式求值
先简单地阐述一下运算符的3个规则: ①先乘方、开方,再乘、除,最后才是加、减; ②从左到右运算 ③有括号得先算括号里的,再算括号外的。 对于字符一个一个地 getchar(),如果这个字符是数字的话,那么就将其压入数据栈,如果是运算符那么就压入算符栈,但运算算符压入算符栈前需要经过一定的处理。 不同运算符有不同的运算优先权,所以要按照一定的优先权计算,但又不仅仅...
2018-05-09 13:50:38
1503
1
原创 如何判断一个链表是否为空?
L为指向表头结点的指针,分别写出带有头结点的单链表、单项循环链表和双向循环链表判空的条件单链表 NULL==L->next单向循环 L==L->next双向循环 L==L->next&&L==L->prior...
2018-05-07 22:24:19
25919
2
原创 大小写字符之间变换的小技巧,速度更快
发现一个特别好玩的大小写字母之间变换的方法,速度更快。#include <iostream>#include<string>using namespace std;int main() { char A = 'A'; char b = 'b'; A = A | 0x20; b = b | 0x20; cout <<"这是大写字母变小写字母...
2018-04-09 09:25:09
1282
原创 C++ new内存在后面加个括号可以初始化
#include <iostream>using namespace std;int main() { int *Array = new int[10]; for (int i = 0; i < 10; i++) { Array[i]+=i+1; cout << Array[i] << endl; } int *Array_in...
2018-04-08 10:58:39
2933
原创 C++浮点数的取整显示
//双精度double的二进制小数,使用64 bit存储 //其中 1位符号位,11位阶码位,52位小数位 //10进制的0.6写成二进制为(-1)^0 * 2^0 * 0.10011001100110011001100110011001100110011001100110011 无限循环 //(-1)^0 * 2^-1 * 1.00110011001100110011...
2018-04-06 01:16:43
2012
转载 内存管理的概念
内存管理(Memory Management)是操作系统设计中最重要和最复杂的内容之一。虽然计算机硬件一直在飞速发展,内存容量也在不断增长,但是仍然不可能将所有用户进程和系统所需要的全部程序和数据放入主存中,所以操作系统必须将内存空间进行合理地划分和有效地动态分配。操作系统对内存的划分和动态分配,就是内存管理的概念。有效的内存管理在多道程序设计中非常重要,不仅方便用户使用存储器、提高内存利用率,还...
2018-04-02 09:55:07
410
原创 C#活用ReadKey()
C#题目:要定义一个数组存用户输入的数据,但是数组的长度是由用户输入数据的多少决定的,而且输入0表示结束。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Text.RegularExpres...
2018-03-31 20:45:34
7930
3
转载 CPU流水线的探秘之旅
原文网址:原文英文原文:A Journey Through the CPU Pipeline 编译:@deuso_ICT 作为程序员,CPU 在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。 CPU 是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有 12 级流水线还是 18 级流水线,甚至是更深的 31 级流水线时,这到些都意味着什么呢?...
2018-03-24 08:56:46
8271
转载 C++继承模型的内存布局
以Clang++编译器为例。对于多继承情况考虑示例代码123struct Base1 {...};struct Base2 {...};struct Derived : Base1, Base2 {...};有如下内存布局首先出现的是派生类Derived类的虚表指针vptr(这里插入一个提醒:一直以来vptr都被国人翻译为虚函数表指针但是vtbl英文原文是virtual table并非virtua...
2018-03-22 10:54:34
636
原创 C++构造/析构函数里调用函数能否实现多态?
先看一道题,题目为:struct A{ void foo(){printf("foo");} virtual void bar(){printf("bar");} A(){bar();}};struct B:A{ void foo(){printf("b_foo");} void bar(){printf("b_bar");}};再执行下面的代码:A *p=new B;...
2018-03-20 16:00:25
987
原创 C++变量常量内存区域分配
一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放...
2018-03-20 15:37:32
1409
转载 看一遍就会懂的红黑树
原文链接前言 红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。 本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证...
2018-03-20 14:59:35
268
原创 各排序算法梗概总结
插入排序:插入排序的基本步骤是 将一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。和玩扑克牌一样,我们摸一张牌,就会把牌插入到手中的牌的合适的位置,等摸完所有的牌后,手中的扑克牌也自然是有序的。冒泡排序:依次比较相邻的两个数...
2018-03-19 23:31:51
244
原创 排序算法之基数排序
如果我们要排序的数据具有多个关键字域,那就可以采用基数排序的方法了。基数排序的主要思想是:假如参加排序的元素最高具有d位,有的数没有d位那么多,则在其欠缺的高位补0,将元素先按最低位(设最右边的位为最低位)的值进行排序,然后按次低位进行排序......最后进行最高位的排序。基数排序如果想达到理想的目的,必须满足两个条件:对各位的排序算法必须是稳定的;每一趟排序的过程中,如果有的元素的位值相同,则它...
2018-03-19 18:43:21
510
原创 排序算法之计数排序
计数排序,顾名思义,就是把要排序的元素都一一计数,某个数值如果总共有10个相同的,该元素对应的个数就记为10;总共有5个相同的,就记为5...在当待排序数组内有大量重复的数值并且这些数值较为集中时,使用计数排序就有很明显的优势了。计数排序的主要思想是,对N个数据集进行排序,每个数据值的范围固定在[0,k),而k远远小于N,创建了k个代表[0,k)中每个值ki的有序的盒子,每个盒子存储待排序数列中与...
2018-03-19 17:48:57
498
原创 排序算法之堆排序
堆排序是一种利用某种数据结构来管理算法执行中的信息的排序算法。堆的数据结构是一种数组对象,可以把它看成一棵完全二叉树。完全二叉树是种什么东西?学过数据结构的人都知道,完全二叉树是 除了树的最底下一层外,其余各层都是满的,而最底下的那一层,结点都必须集中在最左边的若干结点中 的二叉树。比如下图,左边是完全二叉树,右边的不是。堆分两种,大根堆和小根堆,大根堆要满足以下条件:如果这个堆是大根堆,那么...
2018-03-19 12:51:47
368
原创 C++的友元机制:友元类和友元函数
我们在学习类的时候,只有类的成员函数可以访问类的非公有数据成员。而C++,提供了友元机制,允许一个类将其非公有成员的访问权授予指定的函数或类。友元的声明只能出现在类定义的内部的任何地方,一般我们将友元的声明放在类定义的开始或者结尾。由于友元不是授予友元关系的那个类的成员,所以它们不受访问控制的影响。友元可以是普通的函数,或者其它已定义的类的成员函数,又或是整个类。将一个函数设为友元,该函数被称为友...
2018-03-19 09:56:22
562
原创 C++类的静态成员
定义类的静态成员,能够实现同类的多个对象之间数据共享,使用类的静态成员有如下的优点:静态成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突;静态成员可以实施封装,可以是私有成员,而全局对象不可以;静态成员是与特定类相关联的,结构清晰。class Employee{ private: int maxlevel; int level; pu...
2018-03-19 08:00:14
394
原创 惠普笔记本怎样把BIOS的第一启动项改成U盘
作为一只呆萌的程序员或者电脑爱好者,我想你一定很喜欢装各种各样的系统。如果要装双系统,或者重装系统,我们都比较青睐用U盘制作启动盘的方式,毕竟光盘这玩意...的确已经淘汰了,极少数的笔记本才会有光驱。好了废话不多说,如果想使用U盘启动盘来装双系统,那么必须在BIOS里修改启动项,把第一启动项修改为USB。别的电脑先不说,我的电脑型号是 惠普战66 pro G1。首先重启电脑,在电脑屏幕刚亮起的那一...
2018-03-18 19:04:50
10179
转载 VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态怎么解决
原文网址VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态怎么回事?Intel VT-x完整名称是Intel Virtualization Technology,就是Intel虚拟技术,开启它可以让硬件平台同时运行多个操作系统,是虚拟机软件运行必备的技术之一,如果禁用,就会弹出“此主机支持Intel VT-x,但Intel VT-x处于禁用状态”这个提示,解决办法就...
2018-03-18 18:49:04
49740
11
原创 操作系统死锁避免的银行家算法
博客 死锁处理方法 里讲述了4种处理操作系统死锁的方法,分别是死锁预防死锁避免死锁检测和修复撒手不管法其中在讲死锁避免时,提到了安全序列<P1,P2,P3,...,Pn>,所有进程按照 Pi要求的资源≤当前可用资源+所有Pj持有资源,其中j<i 的条件进行排序,如果能排出这样一个序列,那么最终序列中的所有进程都能获得所需的资源。如果存在这样一个安全序列,那称电脑处于安全状态...
2018-03-18 10:11:04
2394
原创 C++里的常对象,常成员及其之间的“混乱”关系
常对象,在定义对象前加一个const,就可以定义常对象了。比如有这样一个类Class_A,可以 Class_A const A或者const Class_A A 这样定义一个常对象A。①常对象中的所有数据成员都是const,因此必须有初值,无论什么情况下,常对象中的数据成员都不能被修改。②除了合成的默认构造函数和默认析构函数外,也不能调用对象的非const型的成员函数。然而,在实际的编程当中,我们...
2018-03-17 23:28:53
329
原创 操作系统:死锁处理方法
如果不了解死锁,可以通过这篇文章进行了解:死锁的概念及资源分配图我们都知道,操作系统可能会遇到死锁这种情况,那么处理死锁的方法有哪些呢?处理死锁和我们生活中遇到的消防很“类似”。下面就是4种应付死锁的方法:死锁预防(Deadlock Prevention):确保系统永远不会进入死锁状态。举个例子,消防上为了预防火灾,如果禁止在任何时刻任何地点使用任何的火,这样就可以保证不会发生火灾了。我们都知道,...
2018-03-17 20:51:42
6257
原创 操作系统之死锁概念和资源分配图
学《操作系统》这门课必须会学到死锁,那么死锁是什么概念呢?死锁是指:由于竞争资源或者通信关系,两个或更多线程在执行中出现,永远相互等待只能由其他进程引发的事件。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。下面我们来看一个有趣的例子:单向同行桥梁这个桥梁只能单向同行,要么往左,要么往右,不同方向的车会共享这个单向通行的桥梁。桥梁的每一部分可视为一个资源,如果整一个桥...
2018-03-17 18:19:26
16631
3
原创 C++非静态成员函数的this指针
很多编程语言都有this指针,比如JavaScript,C#,那么编程界最最最牛掰的语言C++,有米有this指针呢?答案是肯定的,必须得有。C++的类里,除了静态成员函数外(若想了解静态成员函数,可以点击这里static修饰的函数),每个成员函数都有一个额外的、隐含的形参this。当调用这个成员函数时,编译器它会向形参this传递调用成员函数的对象的地址。哈?啥意思呢?又额外,又隐含,说什么瘠薄...
2018-03-17 14:02:18
7870
原创 C++的成员指针定义方式与使用
对象的成员是要占用存储空间的,因此对象也是有指针的,因为C++非常强调类型安全和编译时检查,因此C++的指针一共被分为4类,而且之间不能随便转换:数据指针函数指针数据成员指针成员函数指针数据指针和函数指针是普通指针,C语言里也有,而后面的两种,数据成员指针和成员函数指针被称为成员指针,是C所没有而C++才有的。成员指针是指向类的某一个成员的指针,它的类型与类的类型和成员的类型有关,它只应用于类的非...
2018-03-17 12:51:07
1116
原创 static修饰的函数作用与意义
static修饰的函数叫做静态函数,静态函数有两种,根据其出现的地方来分类:如果这个静态函数出现在类里,那么它是一个静态成员函数; 静态成员函数的作用在于:调用这个函数不会访问或者修改任何对象(非static)数据成员。 其实很好理解,类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有...
2018-03-11 20:37:32
99819
5
原创 sizeof和strlen的区别
sizeof 求出字符串的字符个数,包括结尾符;strlen 求出字符串的实际字符,不包括结尾符sizeof是算符,strlen是函数,在string.h这个头文件里
2018-03-11 19:40:35
128
原创 C语言算符优先级记忆之我的观点
一共有十五个优先级: 同一优先级的运算符,运算次序由结合方向所决定 () [] . -> (括号,成员排第一) ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof (单目运算排第二) * / % (乘除余三) + - (加减四)>> &l...
2018-03-11 11:33:14
1395
原创 强制类型转换(int)、(int&)和(int*)的区别
我们先来看两行代码:float x=1.75,y=1.75;cout<<(int)x<<" "<<(int&)y<<endl;输出为:1 1071644672首先呢,我们来看一下浮点数的格式:float是单精度32位,所以呢:符号位 (Sign):0代表正数,1代表为负数;指数位 (Exponent):用于存储科学计数法中的指数数据,...
2018-03-11 10:08:40
73503
7
原创 选择排序和插入排序的区别
很多人在学排序算法时,都接触到选择排序法和插入排序法,然而很多人对这两个排序法,分别是怎样的,又有什么细微的区别,却不了解。选择排序原理:主要在选择上,每一次从无序队列中选择出最小值,然后将其放置在有序队列的末尾,然后在无序队列中将其删除。插入排序原理:默认第一个元素为有序,后面的逐个向有序中插入,特点就是不断的移动数据,一直到排出序列。...
2018-03-08 20:11:05
3220
原创 *p++和(*P)++的区别
*p++:是先取出*p的值,再使p加1//p是个指针,给p加1,相当于让p指向了原本所指地址的下一个位置,而对于原本所指向的数据,是没有任何影响的(*p)++:是使*p的值加1.//*p则是p指向的位置所对应的值,这个所指向的值要+1....
2018-03-06 20:51:19
6938
原创 用最好的方法去理解const int*, int const*以及int *const
我觉得遇到这种题,从“结合律”的角度来看就很好理解,先看两个简单的,比如const int a 和 int const a。const int a里的const和int结合,是一个意思是一个整型的常量,a作为一个整型常量,是不能改变的;再看 int const a,const和a结合,意思也是 a是一个常量,不能被改变。综上所述,const int a 和 int const a作用是一样的。
2018-01-18 22:21:59
7107
2
原创 排序算法之堆排序
时间复杂度为O(NlogN)的排序算法有很多。其中归并算法虽然时间短,但是需要的内存空间很大,因为其不断递归调用自身;而快速排序算法虽然平均情况下所花费时间也很短,但是在极端情况下,其时间复杂度为O(N²)。而堆排序呢,则是综合了这两者的优点,去除了这两者的缺点,所需要的内存空间不大,而且不管在什么情况下,其时间复杂度都为O(NlogN)。而堆排序也是一种用到数据结构知识的排序算法,可见,数据结构
2018-01-18 01:39:36
170
原创 #define后面再加#号或##号的作用
#define后面如果再加一个 # 号,那么这个符号的作用是文本参数“字符串化”,即出现在宏定义字符文本中的#把跟在后面的参数转换成一个C++字符串常量。#define POUT1 printf(#x);#define POUT2 printf(x);POUT1(Hello World!); //语法正确POUT1("Hello World!");//语法也正确PO
2018-01-03 12:36:16
6120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人