自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】volatile关键字的作用

volatile的作用volatile关键字是防止在共享的空间发生读取的错误。只保证其可见性,不保证原子性;使用volatile指每次从内存中读取数据,而不是从编译器优化后的缓存中读取数据,简单来讲就是防止编译器优化。在单任务环境中,如果在两次读取变量之间不改变变量的值,编译器就会发生优化,会将RAM中的值赋值到寄存器中;由于访问寄存器的效率要高于RAM,所以在需要读取变量时,直接寄存器中...

2019-04-29 23:59:22 4675

原创 【C++】什么情况下会产生临时变量

临时变量是只在调用期间有效,具有常性的一种变量。一、值传递在返回值以值传递(传值和传指针)的形式返回时,会生成临时变量。int sum(int a,int b){ return a + b;}编译器会将结果a+b的值拷贝给临时变量,最终返回的是临时变量;二、具有引用类型在函数调用中,如果形参是引用的类型的情况下:当实参和形参的类型不匹配会产生临时变量;...

2019-04-28 21:56:45 2170

原创 C与C++的区别(3)——指针与引用

我们在学习c语言的时候,知道函数传参有两种,值传递和地址传递;而在C++中,多了一个引用的概念,引用就是给已存在的变量取了一个别名,编译器不会给引用开辟新的空间,与其引用的变量共用一块空间。引用于指针的区别引用:引用就是对某一变量的一个别名,对引用的操作对变量直接操作完全一致;int a = 10;int *p = a;&在此不是求地址运算,而是起到标识作用。 ...

2019-04-28 17:43:01 297

原创 C与C++的区别(2)——new和malloc的区别

一、本质区别在C++中引入更多的关键字,比如:new和delete;而malloc和free是库函数,需要头文件的支持;二、申请的空间所在的位置new关键字为对象分配的空间在自由存储区内。而molloc是从堆上分配内存;C/C++内存通常分为:堆、栈、自由存储区、全局/静态存储区、常量存储区;自由存储区:是C++中通过new和delete动态分配和释放对象的抽象概念;...

2019-04-26 21:14:59 373

原创 C和C++的区别(1)——函数重载

C和C++的区别在C++中,函数重载就是在同一作用域下,函数名相同,而参数列表不同的一组函数;而在C语言中不支持函数重载;这是因为C++编译后在库中的名字与C语言的不同;假设某个函数的原型为void fun(int x,int y)。该函数被C编译器编译后的库中的名字为_fun;而被C++编译器则会产生像_fun_int_int这样的名字。函数重载(1)函数重载指的是同一作用...

2019-04-25 00:04:33 331

原创 不使用其他判断语句和第三方变量,实现两个数的交换和比较

一提到两个变量的交换与比较,一般首先都会想到使用if、? :、switch等判断语句;但在面试的时候,经常会问到不使用判断语句的情况下,如何实现两个变量的交换和比较?变量a、b找出其中比较大的一个:方法一:int max = ((a + b) + abs(a - b)) / 2方法二:int max(int a,int b){ int c = a - b;/...

2019-04-24 11:51:55 230

原创 【C++】delete与delete[]的区别

c++中对new申请的内存释放方式有delete和delect[]两种方式,那这两者到底有哪些区别呢?可能你见过这样的表述:用new分配内存,就用delect释放内存;使用new[]分配内存,就用delete[]释放内存。具体来讲就是delect释放new分配的单个对象指针指向的内存,delete[]释放new分配的对象数组指针指向的内存。那为什么会这样呢?关于动态申请的内存,分两种情况:...

2019-04-21 21:38:29 876

原创 【C++】设计模式之——工厂设计模式的原理与实现

工厂设计模式工厂设计模式提供了生成对象的最佳方法,这一设计模式的优势就在于屏蔽了生成对象复杂的过程。有三种工厂模式,分别为:简单工厂模式 工厂方法模式 抽象工厂模式简单工厂模式原理:工厂生产产品,而这里的产品指的就是对象。在简单工厂模式中,用一个标识对应一个对象的方法,要生成某一产品时,只需要传入对应的标识,这样做的优势是当需要生产大量的对象时,不需要对对象名进行记忆,并且...

2019-04-21 18:20:34 390

原创 【数据结构】希尔排序

希尔排序将原本大量记录数的记录进行分组。分割成若干个子序列,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时,再对全体记录进行一次直接插入排序。基本有序:基本有序的意思就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间。像{2,1,3,6,4,7,5,8,9};但像{2,9,3,6,4,7,5,8,1}9在第二位,1在倒数第一位就谈不上基本有序。分割策略:将相距...

2019-04-20 18:20:38 163

原创 【数据结构】直接插入排序以及时间复杂度的分析

直接插入排序直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。完整代码 :#include <stdio.h>void InsertSort(int arr[],int len){ int i = 1; int temp; int j; for(i;i < len;i++) { temp ...

2019-04-20 16:57:43 8193 1

原创 【数据结构】简单选择排序以及时间复杂度的分析

简单选择排序简单选择排序法就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。如图所示:完整代码#include <stdio.h>void SimpleSelectSort(int arr[],int len){ int i = 0; int min;//记录最小值的下标 int temp; for(i;i &l...

2019-04-20 11:19:34 7059 2

原创 【操作系统】分页存储管理

三种分配存储管理方式分页式存储管理:离散分配的基本单位是页 分段式存储管理:离散分配的基本单位是段 段页式存储管理:离散分配的基本单位是段、页空间划分1)对于进程:将一个用户进程的地址空间(逻辑空间)划分成若干个大小相等的区域,称为页或页面。2)对于内存:内存空间也分成与页大小相等的区域,称为块(物理块),同样是从0开始编号。地址结构逻辑地址:逻辑地址...

2019-04-17 09:36:58 4626

原创 【c++】继承和组合混搭下的构造和析构顺序

类和类之间有三种关系:①组合关系:has_a a part of的关系②继承关系:is_a a kind if的关系③代理关系:在容器适配器中,屏蔽底层的接口,对外提供新的特性在只有的组合的关系中可直接调用构造;在继承中,先调用基类的构造,后调用派生类的构造;析构的时候只要记住,先构造的后析构,也就是先析构派生类,后析构基类即可。那么在有组合和继承混搭...

2019-04-16 11:42:36 471

原创 从面向过程到面向对象

面向过程编程面向过程编程的核心:功能分解(自顶向下,逐步求精)。就是将一个大问题分解成多个小问题,多个小问题再进行分解;解决小问题就会容易很多面向过程最重要的原则:高内聚、低耦合内聚是指模块内部各成员之间关联的紧密程度耦合是指模块与模块之间关联的紧密程度面向过程的特点: 1)分析解决问题所需要的步骤 2)利用函数实现各个步骤,解决个问题面向过程编程的主要缺点就是 ...

2019-04-16 10:51:37 257

原创 【c++】内存池的实现

使用内存池的原因:在c++开辟空间和释放空间使用的是new和delete,而new和delete是对内存的操作,对内存进行操作必然需要从用户态转到入内核态,系统在接收到分配一定大小内存请求时,首先查找内部维护的内存空闲块表,并且需要一定的算法找到合适的内存块,由此频繁的new和delect会降低效率,并且在内存中会产生外碎片。默认的内存管理函数还考虑到多线程的应用,需要在每次分配和释放内存时加...

2019-04-15 12:33:01 267

原创 【数据结构】基数排序

一、基数排序基数排序(RADIX SORT)是一种基于计数排序或者是最优桶排序。这里区分一下基数排序与桶排序基数排序只是借用十只桶来为0-9这十个基数进行排序分堆(可以说是最优的桶排序),反复的在保持稳定的情况下,对个位、十位。分别进行桶排序 桶排序里面的桶不一定是十个桶,可以是任意多的桶,只是桶的数量会影响排序的速度,桶排序主要是将元素映射到桶里面,再在各个桶里面进行排序,最后再将各个...

2019-04-11 23:23:42 554

原创 【数据结构】堆排序

一、堆堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。在堆排序中使用到大顶堆。完全二叉树的性质:●如果按照层序遍历的方式给结点从0开始编号,则结点之间满足如下关系:●如果i = 0;则结点i是二叉树的根,无双亲●如果i > 0; 对于左孩子,则其双亲是结点i/2;对于右孩子,则其双...

2019-04-11 15:29:09 213

原创 【数据结构】归并排序

一、归并排序归并排序是建立在归并上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。该算法的核心思想是二路归并。二、归并排序的介绍<1>归并排序的过程:(1)根据数组的mid值(数组的起始下标加数组的末尾下标除以二)将序列划分为2个子序列,多次向下递归,直到划分为一个子序列只包含一个数...

2019-04-02 21:13:45 216

转载 Hash表算法

第一部分:Top K 算法详解问题描述百度面试题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。...

2019-04-02 11:48:36 244

空空如也

空空如也

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

TA关注的人

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