自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (1)
  • 收藏
  • 关注

原创 《Effective C++》读书笔记

《Effective C++》的目录方便回顾。1.视c为一个语言联邦2.尽量以constenuminline替换-define3.尽可能使用const4.确认对象被使用前已先被初始化5.了解c默默编写并调用了哪些函数6.若不想使用编译器自动生成的函数就该明确拒绝7.为多态基类声明virtual析构函数8.别让异常逃离析构函数9.绝不在构造和析构过程中调用virtual函数10.令operator-返回一个reference-to-this11.在operator-中处理自我赋值12.

2020-12-21 00:03:20 254 1

原创 自己实现一个 atoi 函数

atoi(ASCII to integer),把字符串转换成整型数。情况一:输入的字符包含不是数字字符的字符? 例如:“123adc4”. 针对这种情况,我们只要加上判断就行了,只要遇到不是数字字符的直接返回。情况二:如果在数字字符前面有正负号又该怎么办??? 例如:”-123”、“+123”. 针对这种情况,我们再加上判断,判断字符串的第一个字符是不是正负号,并用一个标记位f...

2018-09-03 15:43:12 2540

原创 在浏览器中输入url回车之后会发生什么

当输入一个网址,例如www.baidu.com之后会发生以下事件: 域名解析 –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户 以Chrome浏览器为例:...

2018-08-30 17:08:10 656

原创 sizeof()求类的大小

空类、带构造函数、带虚函数#include<iostream>using namespace std;class A{};class B{public: B() {} ~B() {}};class C{public: C() {} virtual ~C() {}};int main(){ cout <&l...

2018-08-28 19:36:01 2156 3

原创 C++---智能指针(auto_ptr、unique_ptr、shared_ptr)

智能指针void fun(string str){ string ps = new string(str); str = ps; return;}当函数调用时,都会分配堆中的内存,但没有回收,会导致内存泄漏。这种情况在 return 之前加上 free 就可以了。void fun(string str){ string ps = new s...

2018-08-26 23:56:28 869

原创 Linux---死锁及避免死锁的方法

死锁什么是死锁互斥锁是保护临界资源被线程间(或进程间)互斥的访问临界资源,当一个线程得到锁不释放时另一个线程申请时必须等待。当多个线程因为竞争资源而造成的一种僵局(互相等待),如果不施以援手,这些进程将永远等待。死锁产生的原因① 系统资源不足:系统中所拥有的资源其数量不足以满足线程运行的需要,使得在运行过程中,因争夺资源而陷入僵局。 ② 线程间推进顺序非法:线程间在运行过程中...

2018-08-20 12:35:06 6345

原创 MySQL---数据库索引

提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确 的‘create index’,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插 入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以他的价值,在于提高一个海量数 据的检索速度。 常见索引分为:主键索引(primary key),唯一索引...

2018-08-18 14:00:54 321

原创 网络知识总结---(五)高级I/O函数

与网络编程相关的I/O函数大概可以分三类:用于创建文件描述符的函数:包括 pipe、dup/dup2用于读写数据的函数:包括 readv/writev、sendfile、mmap/munmap、splice 和 tee用于控制I/O行为和属性的函数:包括 fcntl 函数pipe函数pipe 函数用于创建一个管道,以实现进程间通信。#include<unist...

2018-08-12 16:45:36 247

原创 网络知识总结---(四)Linux网络编程基础API

socket地址API主机字节序与网络字节序主机字节序:PC机多采用小端字节序,因此小端字节序又被称为主机字节序。 网络字节序:大端字节序。Linux下完成主机字节序和网络字节序的转换:#include<netinet/in.h>unsigned long int htonl(unsigned long int hostlong);unsigned short...

2018-08-12 12:48:22 581

原创 网络知识总结----(三)TCP协议详解

TCP服务TCP:可靠、有链接、面向字节流。 使用TCP协议通信的双方必须先建立连接,然后才能开始数据读写。TCP连接是全双工的。有链接:TCP协议的这种连接是一对一的,所以基于广播和多播的应用程序不能使用TCP服务,应使用无连接的UDP协议。字节流与数据报 字节流:发送端执行的写操作次数与接收端执行的读操作次数之间没有任何数量关系。 数据报:发送端应用程序每执行一次写...

2018-08-11 23:57:14 395

原创 网络知识总结----(二)IP协议详解

IP服务IP协议:是TCP/IP协议族的动力,它为上层提供无状态、无连接、不可靠的服务。无状态:IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输、接收都是相互独立、没有上下文关系的。 优点:简单高效,无需为状态分配资源信息,也不需要传递状态信息。(UDP、HTTP也是无状态)缺点:无法处理乱序和重复的数据报无连接:IP通信双方都不长久的维持对方的信息。这样,上层...

2018-08-11 14:11:21 266

原创 网络知识总结----(一)TCP/IP协议族

TCP/IP协议族TCP/IP协议族:一个四层的协议系统,自底向上包括数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议实现。上层协议使用下层协议提供的服务。 数据链路层数据链路层:实现了网卡接口的网络驱动程序,以处理数据在物理介质(以太网、令牌环)上的传输。 不同的物理网络具有不同的电气特性,但网络驱动程序只为上层协议提供一个统一的接口。主要协议:...

2018-08-10 15:11:33 609

原创 剑指offer--机器人的运动范围

机器人的运动范围地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?...

2018-08-09 22:34:54 193

原创 100w个数中找出最大的前K个数

找出最大的前K个数,这很容易让我们联想到优先级队列,而对是优先级队列中堆又是效率最高的,所以选择使用堆来解决这个问题。 创建小堆小堆堆顶元素为最小的,只要小于最小的就进入队列 创建大小为K的堆遍历数组,大于最小的就进行替换,通过堆的特性,堆重在进行比较,堆顶依旧最小。#include<iostream>#include<math.h>using names...

2018-08-09 17:15:51 1132

原创 实现一个memcpy函数和strcpy函数

memcpy函数c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 函数原型:void* Memcpy(void* dest, const void* src, const rsize_t n) 因为是内存拷贝,所有接受的值也不知道是什么类型的,所以给出一个void*类型来接收。void的含...

2018-08-09 15:52:26 789

原创 哈希表(散列表)捋一捋

散列表(Hash table)通过将关键码映射到表中的某个位置来存储元素,然后根据关键码用同样的方式进行直接访问散列表理想的搜索方法是可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,使元素的存储位置与它的关键码之间建立一个确定的对应函数关系Hash(),那么每个元素关键码与结构中的一个唯一的存储位置相对应:Address = Hash(Key)...

2018-08-08 23:47:41 1025

原创 C++---写时拷贝解决深浅拷贝问题

对于普通的类型来说,拷贝没什么大不了的。int a = 0;int b = a;不会出现任何问题。而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。浅拷贝首先来说说我们常遇到的浅拷贝的情况。#include <stdio.h> class student{public: student() // 构造函数...

2018-08-03 15:45:53 521

原创 大小端判断和网络字节序

大小端由来在计算机内存中,通常是以字节(Byte),也就是 8 个位(Bit)为基本存储单元(也有以 16 位为基本存储单元的)。 对于像C++中的char这样的数据类型,占用一个字节的大小,不会产生什么问题。 但是当数据类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这4个字节在寄存器中的存放顺序的问题。比如int maxHeight = 0x1...

2018-08-03 13:56:22 855 2

原创 C++---静态多态与动态多态

多态多态按字面的意思就是多种形态,相同的方法调用,但是有不同的实现方式。多态性可以简单地概括为“一个接口,多种方法”。 C++有两种多态形式:静态多态动态多态静态多态静态多态:也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。 静态多态有两种实现方式...

2018-08-02 18:32:37 40871 7

原创 C++---继承(单继承、多继承、菱形继承和虚拟继承)

为什么继承面向对象编程的主要目的之一是提供可重用的代码。传统的C函数库通过预定义、预编译函数实现。C++通过类继承实现,累继承的大致功能:可以在已有的类的基础上添加功能可以添加数据修改类方法的行为基类&派生类从一个类派生出另一个类时,原始类称为基类,继承类称为派生类。 首先定义一个基类,表示乒乓球会会员。// 乒乓球会会员类class Tab...

2018-07-31 17:18:13 488

原创 C++---六个默认成员函数

类类是一种将抽象转化为用户定义类型的C++工具,它将数据表示和操纵数据的方法组成一个简洁的包。类的大小实现来看一下什么都么有的类–空类 空类的大小为 1 ,这是为什么呢? 当创建一个空类时就要创建一个地址,来标识空类的地址,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址,所以空类所占的内存大小是1个字节。 非空类的大小是怎么计算的...

2018-07-29 21:40:08 335

原创 C++---引用变量(&)

引用变量引用是已定义变量的别名创建引用int a;int & b = a; // b为a的引用引用(&),b 为 a 的别名在函数引用时,必须对其初始化一个变量可以有多个引用,一个引用只能指向一个实体a 和 b 指向的是同一块内存空间将引用作为参数引用作为函数参数,使得函数中的变量名成为调用函数程序中的变量的别名。这种传递称为引...

2018-07-29 14:23:11 9787 4

原创 C++---内联函数和宏函数的优缺点

内联函数内联函数是C++为提高程序运行速度进行的改进,是一种以空间换时间的做法。内联函数与常规函数常规函数运行程序时,常规函数调用会使程序跳到另一个地址(函数地址),并在函数结束时返回。 详细过程:执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需要将返回值放入寄...

2018-07-28 23:05:07 2689

原创 剑指offer---二维数组中的查找

二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。我的解:(利用size函数求出数组的大小,利用两个for函数循环遍历数组,一次比较。因为数组是有序的,所以当数组内容大于target时即可返回false)bool Find(int target...

2018-07-25 22:57:07 288

原创 七大排序算法--快速排序及优化

快速排序简单快排快速排序(Quick Sort)也叫做分区排序,是目前应用最广泛的排序算法。在C++标准库中的排序程序就被称作qsort,因为快速排序是其实现中的最基本算法。是一种不稳定的算法。经过上面的图解,相信聪明的你们已经明白了快排的奥义 但是 这样的排序算法排序算法有一个致命的弱点,当序列已经是有序序列时,其递归树成为单枝树,成为最坏的情况优化快排三...

2018-07-24 23:38:45 625

原创 七大排序算法--归并排序及优化

归并排序利用分治法的思想,归并排序将待排序的元素序列分成两个长度相等的子序列,为每个子序列排序,然后再将他们合并成一个序列。 归并排序不依赖待排序元素的序列的初始排列,这样就避免了快排的最差情况。 在执行归并算法时,先将划分的子序列复制到辅助数组中,然后将子序列按顺序存到原数组中。 这是一个稳定的排序算法,时间复杂度为O(nlog2^n)。代码实现 首先将序列进行递归划分成最小...

2018-07-24 00:08:21 573

原创 图示讲解AVL平衡二叉树的左旋和右旋

AVLTree高度平衡的搜索二叉树 一棵平衡树,或是空树,或是具有以下性质的二叉搜索树:左子树和右子树都是AVL树,且左右子树的高度之差的绝对值不超过1。 该二叉树,根结点的右子树高度为3,左子树高度为2。结点上方的数字为平衡因子,因为右子树高度比左子树高度大1,所以根结点的平衡因子为1。 一颗平衡二叉树,如果有n个结点,其高度可保持O(log2^n),平均搜索长度也可以保持在O(l...

2018-07-22 22:58:55 22979 11

原创 二叉树--二叉搜索树的实现

搜索环境静态环境:搜索结构在执行插入和删除等操作的前后不发生变化。这种结构操作简单,效率不高,而且需要处理一出问题。 动态环境:为了保持较高的搜索效率,搜索结构在执行插入和删除等操作的前后将自动进行调整,结构可能会发生变化 前者称为静态搜索结构,后者称为动态搜索结构。二叉搜索树折半查找,每次从搜索序列的中间进行搜索,把区间缩小一半,通过有限次的迭代,很快就能逼近到所要寻找的元素...

2018-07-15 02:08:08 322

原创 MySQL---表的增删改查

增删改查是使用数据库时最常用的操作。增insert into 表名 [ ( 字段名 , ( 字段名 ) ) ] value (value , [, value ] ) ; 如果只给表的某几个字段赋值,则需要制定字段名给表中所有的字段名添加数据,不必写字段名插入的数据应该与字段的数据类型相同。使用desc 表名 可以查看字段类型数据大小应该在...

2018-07-14 00:33:53 534

原创 七大排序算法---堆排序

堆排序第一步:根据初始输入数据,利用堆的调整算法 siftDown() 形成初始堆 第二步:通过元素交换和重新调整堆进行排序。建堆(大堆)轻松教你建堆→ 上面链接是建立小堆的,建立大堆在理解小堆之后,也是能轻松写出来的。代码实现//构造函数maxHeap(T * arr, int sz) { heap = new T[sz]; ...

2018-07-11 22:10:33 277

原创 MySQL---数据库表的约束

表的约束真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性。空属性两个值:null(默认值)和 not null(不为空)数据库默认字段基本为空,但是实际应用是,不建议为空 默认值某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择使用默认值。 默认值生效后,数据在插入的时候...

2018-07-08 11:41:54 343

原创 堆---实现最小堆及堆的插入与删除

堆堆在优先级队列的各种实现中,是最高效的一种数据结构 假定在各个数据记录(或元素)中存在一个能够标识数据记录(或元素)的数据项,并将依据该数据项对数据进行组织,则可数据项成为关键码(key) 如果有一个关键码的集合K = {k0 , k1 , k2 , … , kn-1},把它的所有元素按完全二叉树的顺序存储存放在一个一维数组中。并且满足: ki <= k2i+1 且 ki &...

2018-07-07 23:52:10 30728 1

原创 二叉树---前中序数组建立唯一二叉树

二叉树的个数具有n个结点的不同的二叉树有多少种?这与用栈得出的从1到n的数字有多少种不同的排列具有相同的结论。 那么,利用给定了一颗二叉树的前序序列(ABHFDECKG)和中序序列(HBDFAEKCG)能否唯一的确定一颗二叉树?前序序列中,第一个字母A一定是数的根结点。中序序列中,被划分为两个子序列:((HBDF)A(EKCG)),这样与二叉树第一次近似。 然后,取前序序列的下一个...

2018-07-04 00:26:27 912

原创 队列---链式队列及双端队列实现

链式队列链式队列是基于单链表的一种存储方式。 在单链表的每一个节点中有两个域:data域存放队列元素的值,link域存放单链表下一个结点的地址。队列的队头指针指向单链表的第一个结点,队尾指针指向单链表的最后一个结点。队列的队头元素存放在单链表的第一个结点内,若要从队列中退出一个元素,必须从单链表中删去第一个结点。存放着新元素的结点应插在队列的队尾,即单链表的最后一个结点后面,这个...

2018-07-03 00:20:21 1198

原创 队列---简单实现杨辉三角求二项式的系数值

队列队列是另一种限定存取位置的线性表。它只允许在表的一端插入,在另一端删除。允许插入的一端叫做队尾,允许删除的一端叫做队头。 利用数组建立队列 由上图对队列的描述来看,定长的数组很快就会溢出。 但是,这种“溢出”可能是假溢出,因为数组的前端可能还有空位置。为了能够充分的利用数组的存储空间,把数组的前端和和后端连接起来,形成一个环形的表,让队列成为一个循环队列。 循环队列:数组首...

2018-06-30 00:56:47 1714

原创 MySQL---数据库中数据类型的合理运用

数据类型bit基本语法:bit[(M)]位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。 插入一个数字试一试:插入(10,10) 我们发现,插入的bit类型的10变成了空的。bit类型的字段在显示时,是按照ASCLL码对应值显示的。如果有只存放0或1的值,可以定义bit或bit(1),可以节省空间。数值类型在MySQL...

2018-06-27 15:11:49 787

原创 MySQL---坐下,都是基本操作(创建数据库和表,修改表)

数据库介绍什么是数据库数据库用于数据保存,相对文件,有以下优点:数据库保存数据更为安全有利于查询和对数据的管理可以存放海量的数据可以在程序中控制数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)数据库分类SQL Server:.Net程序员最爱,适合处理中大型项目。Oracle:Java程序员使用,处理中大型项目,适合处理复杂的业务逻辑,...

2018-06-26 00:28:17 400

原创 栈和递归---斐波那契数列的非递归实现

递归求裴波那契数列的第n项Fib(n)的公式为: f(n) = {n,Fib(n−1)+Fib(n−2),n=0或1n>=2{n,n=0或1Fib(n−1)+Fib(n−2),n>=2\begin{cases}n, & \text{n=0或1} \\Fib(n-1)+Fib(n-2), & \text{n>=2}\end{cases} 代码实现l

2018-06-24 22:19:56 7544 1

原创 MySQL---如何在window 10和CentOS 7系统下安装MySQL

Windows 10安装准备下载安装包网盘下载MySQL 密码: qx67 官网下载 检查操作系统类型使用快捷键win+pause 查看需要安装32(x86)位还是64位(x64) 检查系统是否已安装MySQL如果系统中已经安装过MySQL那么建议完全卸载之后重新安装。 开始安装执行安装包选择安装类型Develope...

2018-06-24 02:07:37 456 1

原创 栈---逆波兰表达式(RPN)的计算

表达式表达式 = 操作数(运算对象) + 操作符(运算符) + 分界符 算数表达式有三种表示:(逆波兰表达式又称为后缀表达式)中缀表达式(infix):<操作数><操作符><操作数>例如:A+B前缀表达式(prefix):<操作符><操作数><操作数>例如:+AB后缀表达式(postfix):<操作数...

2018-06-22 15:51:32 2158

课程设计HTML网上书城前端设计代码

简单的HTML语言,框架和设计都在一个文件,特别易懂,设计很具体,可以直接拿来用。

2018-07-24

空空如也

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

TA关注的人

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