Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器 软件资源

软件开发小程序制作系统集成与运维空间租用硬件开发视频监控技术咨询与支持——联系电话:0311-88999002/88999003

首页 / 操作系统 / Linux

白话经典算法系列之 归并排序的实现

白话经典算法系列之 归并排序的实现

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中void MemeryArray(int a[], int n, int b[], int m...
C++运算符重载

C++运算符重载

基本知识重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成。运算符可以重载为成员函数和非成员函数。当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的(显式)参数比运算对象的数量少一个。调用重载运算符函数//非成员函数的等价调用data1 + data2;//normal expressionoperator+(data1,data2); // equal function call/...
Qt学习笔记之模拟时钟

Qt学习笔记之模拟时钟

简述Qt自带的示例中有一个是关于时钟,演示了如何用QPainter的转换和缩放特性来绘制自定义部件。其中主要包含了时针、分针的绘制,并不包含秒针。下面,我们在原示例的基础上进行扩展。简述实现方式示例效果源码更多参考实现方式由于时钟是妙级更新的,所以我们需要定时刷新,时钟则使用之前讲过的QPainter 2D图形来进行绘制。使用QTimer定时刷新,设置超时时间为1000毫秒(1秒)。绘制时钟,通过paintEvent()实现,包括:时针、分针、秒针、及面板...
Qt学习笔记之Concurrent框架

Qt学习笔记之Concurrent框架

简述Qt Concurrent命名空间提供了一个高级API来编写多线程程序,而无需使用低级线程原语,例如:互斥、读写锁、等待条件或信号量。使用QtConcurrent编写的程序使用的线程数量会自动根据可用的处理器数量进行调整,这意味着,当在未来部署多核系统时,今天编写的应用程序将继续适应。简述Qt Concurrent更多参考Qt ConcurrentQtConcurrent为并行列表处理包含了函数式编程风格APIs,包括用于共享内存(非分布式)系统的一个...
Qt学习笔记之可重入与线程安全

Qt学习笔记之可重入与线程安全

简述本篇文章中,术语“可重入性”和“线程安全”被用来标记类与函数,以表明它们如何被应用在多线程应用程序中。一个线程安全的函数可以同时被多个线程调用,甚至调用者会使用共享数据也没有问题,因为对共享数据的访问是串行的。一个可重入函数也可以同时被多个线程调用,但是每个调用者只能使用自己的数据。因此,一个线程安全的函数总是可重入的,但一个可重入的函数并不一定是线程安全的。扩展开来,一个可重入的类,指的是它的成员函数可...
Qt学习笔记之Threads和QObjects

Qt学习笔记之Threads和QObjects

简述QThread继承自QObject,它发射信号(signals)以表明线程执行开始或结束,并提供了一些槽函数(slots)。更有趣的是,QObjects可以在多线程中使用,发射信号以在其它线程中调用槽函数,并且向“存活”于其它线程中的对象发送事件(post events)。这是可能的,因为每一个线程都拥有它自身的事件循环(event loop)。简述QObject可重入性每个线程的事件循环从其它线程访问QObject子类跨线程的...
Glibc内存管理方式

Glibc内存管理方式

程序员接触的内存空间和系统接触的物理内存空间是有所区别的。对于一般进程来讲,他面对的是一个线性虚拟内存空间:地址从0到最大值。每一个进程面对的虚拟内存空间都是一样的,都享有全部的内存地址。虚拟内存空间是线性的,但并不意味着是连续的。部分地址段的虚拟空间可以是缺失的(不是所有地址都可以用来存储数据)。虚拟内存可以按页管理,每一页大小一般为4kb。每一页背后都有一个实际物理内存(可以是主存也可以是辅存)与之对应。在物理内存中我们不叫页,而称之为帧。分页的好处就...
Glibc头文件和宏定义

Glibc头文件和宏定义

头文件没啥好说的,无非就是" "和< >的区别,这估计只要是学过C/C++的人都明白。现在的编译器对头文件的包含顺序没有要求,但老的C实现则不一样。当然,我们现在无需关心头文件顺序了。我们为啥要包含头文件呢?头文件里面有定义嘛,使用任何函数之前都必须定义该函数。所以我们并不强求包含头文件,只要你自己在库函数使用之前定义该函数,有些编译器还会自动的添加标准库定义。但是呐,我们还是推荐将头文件添加上去,头文件里面有时候还会包含类型定义、常量定义、宏...
将本地的Java项目提交到GitHub

将本地的Java项目提交到GitHub

1.我们新建一个了java项目后,需要提交到github进行版本控制2.如果此时github中的仓库不为空,我们在本地使用git push提交时会报以下错误,! [rejected] master -> master (non-fast-forward)原因:github仓库中已经存在本地项目中不存在的文件,发生了冲图解决方法:先将github仓库中的文件全部pull下来,此时由于这是2个不相关的仓库,直接使用git pull 会报错:fata...
Linux C动态内存泄漏追踪方法

Linux C动态内存泄漏追踪方法

C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借有还才是好孩子)。当你想找出内存泄露的地方时,有的投入海量的代码中,头痛不已。还好GNU C库提供了些简单的方法。mtrace和muntrace两个函数可以帮助我们追踪动态内存使用情况。前提是我们设置了MALLOC_TRACE环境变量,改环境变量需要指向我们系统下的一个可写入的常规文件。做法如下:MALLOC_TRACE=/your/path/to/file....
Glibc 内存申请和释放及堆连续检查

Glibc 内存申请和释放及堆连续检查

C语言有两种内存申请方式:1、静态申请:当你声明全局或静态变量的时候,会用到静态申请内存。静态申请的内存有固定的空间大小。空间只在程序开始的时候申请一次,并且不再释放(除非程序结束)。2、自动申请:当你声明自动变量的时候会使用自动申请。函数参数、局部变量都属于自动变量。这些变量空间在程序执行致相关语句块申请,离开语句块时释放。还有一种内存申请方式:动态内存申请。C语言变量并不支持动态内存申请,这一功能由库函数实现。C里面没有动态这个存储类型!!当你需要存储...
Java内存模型-基础

Java内存模型-基础

基础并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。同步是指程序用于控制不同线程之间...
Java内存模型-重排序

Java内存模型-重排序

数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a = 1;b = a;写一个变量之后,再读这个位置。写后写a = 1;a = 2;写一个变量之后,再写这个变量。读后写a = b;b = 1;读一个变量之后,再写这个变量。上面三种情况,只要重排序两个操作的执行顺序,程序的执行结果将会被改变。前面提到过,编译器和处理器可能会对操作做重排序。编译器和处理器在重...
ConcurrentHashMap原理分析

ConcurrentHashMap原理分析

当我们享受着jdk带来的便利时同样承受它带来的不幸恶果。通过分析Hashtable就知道,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,安全的背后是巨大的浪费,而现在的解决方案----ConcurrentHashMap。ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以及如何锁。如图 左边便是Hashtable的实现方式---锁整个hash表;而右边则是ConcurrentHashMap...
Java中newInstance()和new()

Java中newInstance()和new()

在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。这里有必要提一下就是Class下的newInstance...
<< 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 >>