快速排序

快速排序被列为20世纪十大算法之一。 基本思想是:选取一个枢轴,通过一趟排序将待排记录分割成独立的俩部分,其中一部分记录比枢轴小,另外一部分记录比枢轴大;然后再继续对分割好的的字序列进行上述排序。实现代码void swap(int *a, int low, int high) { int...

2017-08-31 15:09:21

阅读数 80

评论数 0

有序表查找——折半查找,又为二分法

折半查找,又为二分法前提:线性表中的记录为有序的(一般是从小到大)基本思想:在有序表中,取中间值和要查找的值比较 若等于中间值,则中间值即为要查找的 若小于中间值,则中间值的左半区域继续查找 若大于中间值,则中间值的右半区域继续查找 不断重复上述过程int Binary_S...

2017-08-29 17:02:22

阅读数 520

评论数 0

C++ 多态 (纯)虚函数 虚函数表解析

多态 定义: 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数原理: C++多态性是通过虚函数来实现的 多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。而如果函...

2017-08-16 14:39:11

阅读数 240

评论数 0

用内核对象进行线程同步——信号量内核对象

信号量内核对象包含一个使用计数,还有另外俩个32位值:一个最大资源计数,一个当前资源计数。 最大资源计数表示信号量可以控制的最大资源数量,即可以同时调度的最大线程数;当前资源计数表示信号量当前可用资源的数量,即当前可调度的线程数。信号量规则: 1. 当前资源计数 > 0, 信号量处于触...

2017-08-09 19:03:54

阅读数 159

评论数 0

用内核对象进行线程同步——互斥量内核对象

互斥内核对象用来确保一个线程独占对一个资源的访问。互斥亮和关键段的的行为完全相同,但关键段是用户模式下的同步对象,意味着互斥量比关键段慢。创建互斥量// bInitialOwner // FALSE:互斥量不为任何线程所占用,处于触发状态; // TRUE:互斥量被调用线程线程所占用,处于未触发...

2017-08-09 15:03:46

阅读数 94

评论数 1

用内核对象进行线程同步——事件内核对象

事件内核对象 1. 手动重置事件:当一个手动重置事件被触发的时候,所有等待该事件的线程都变为可调度状态。所以要注意此时所有的线程都只能以只读的方式来访问内存,这也是多个线程能够同时运行的唯一原因 2. 自动重置事件:当一个自动重置事件被触发的时候,只有一个等待该事件的线程都变为可调度状态(...

2017-08-09 11:04:16

阅读数 105

评论数 0

用户模式下的线程同步——Slim读/写锁

SRWLock的目的和关键段一样,但不同的是SRWLock可以区分哪些线程要读取共享资源,哪些要更新共享资源。读取共享资源的线程因为不会破坏共享资源的数据,故这些线程可以同时读取同一共享资源,但要更新共享资源的线程必须独占共享资源,此时读取线程也没有权限访问共享资源。更新线程: 1.定义一个SR...

2017-08-08 16:58:03

阅读数 153

评论数 0

用户模式下的多线程同步——关键段

关键段使线程访问共享资源之前独占它,共享资源访问结束后线程释放对资源的独占。但是这个过程中,系统也可能暂停该线程取调度其他线程,但是,在关键段释放之前,不会调度其他想访问同一资源的线程。#include "stdafx.h" #include <windows.h>...

2017-08-08 14:58:26

阅读数 62

评论数 0

用户模式下的多线程同步——原子访问(Interlocked系列函数)

下面这段代码,通过俩个线程改变一个全局变量的值,咋一看,没什么问题,g_x通过每个线程都自增1,最后g_x的值为2。但实际上有多个线程改变共享变量的值时,如果不加其他任何操作,是很危险的,最后共享变量的值往往不可预见。 简单分析下原因 我们期待的执行顺序是: Thread1. g_x把值(0...

2017-08-08 13:38:59

阅读数 123

评论数 0

C++ 单例设计模式

有些类只需要有一个实例,比如软件开发过程中的日志功能,因为我们要频繁的写log,不可能每次都要重新new一个日志实例,然后用完再delete。当然在C++中可以用全局变量来代替,但全局变量有太多的不可预测性,特别是在多线程的开发中,所以对全局变量我们是能不用就不用。此时单例设计模式就派上用场了。先...

2017-08-04 18:00:09

阅读数 178

评论数 1

指针传值易注意点

struct _ClassA { int x; int y; }ClassA, PCLassAFun(ClassA *p) { ClassA a; a.x = 1; a.y = 2; p = &a; }// 调用Fun后,会发现p指针还...

2017-08-02 18:04:11

阅读数 91

评论数 0

C++构造函数初始化列表

class Test { public: // const型数据成员初始化的唯一方法 Test():z(0), d(1) { x = 2; y = 3; }; private: int x; int y; const int z; const int...

2017-07-18 17:53:24

阅读数 85

评论数 0

拷贝构造函数

拷贝构造函数创建一个新的对象,此对象是另外一个对象的复制品:将原对象的数据成员逐一赋值给目标对象相应的数据成员。没有的话会自动生成一个默认构造函数。// 原型(参数类型必须是引用) Person(Person&); 或Person(const Person&); // 如果有多个参...

2017-07-18 16:59:46

阅读数 100

评论数 0

C++ 面向对象编程提高代码的效率性和健壮性

一、通过引用来传递和返回对象和其他变量一样,对象既可以通过传值方式,也可以通过引用方式来传递和返回。一般来说,除非迫不得已,都采用引用方式。这是因为通过传值方式来传递和返回对象需要面临对象间的拷贝操作,是数据变大,从而降低效率,浪费内存。(传递一个指向对象的指针与引用方式效果相同)class Te...

2017-07-17 11:42:10

阅读数 244

评论数 0

64位进程和32位进程通信问题

最近遇到一个问题,64位程序向32位程序发送一个WM_COPYDATA消息, 发现传递的数据和收到的数据不对函数代码如下,typedef struct tagCOPYDATASTRUCT { ULONG_PTR dwData; //用户定义数据 DWORD cbData; //用户...

2017-01-10 17:30:19

阅读数 2150

评论数 0

wpf学习笔记

添加一整张背景图片 <Grid.Background> <ImageBrush ImageSource="BackGround.bmp" /> </Grid.Background> 添加几张图片拼接背景(图片为100*400) ...

2016-12-15 11:43:38

阅读数 233

评论数 0

C++ 输出文字到csv文件 乱码问题

要写一个utf-8的文件头,然后输入到csv文件开头,如下TCHAR wszUTF_8BOM[4] = {(TCHAR)0xEF, (TCHAR)0xBB, (TCHAR)0xBF, 0};

2016-09-27 19:09:12

阅读数 954

评论数 0

C++ 经典面试题

1.  引用与指针有什么区别? 答 、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。   2.  全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答 、全...

2016-09-23 14:21:49

阅读数 85

评论数 0

移动端手指上下滑动切换插件pageSlider

转载于(下载该插件): http://www.jq22.com/jquery-info8395###PageSlider 是一个基于zepto.js用于实现H5单页面跟随手指上下滑动切换的组件,支持通过transform3D启动GPU加速,目前仅支持移动端touch设备。支持浏览器: Chrome...

2016-09-12 15:03:36

阅读数 2875

评论数 4

jQuery append动态添加的元素添加事件没有效果

解决办法:在添加元素的时候就用on绑定事件var temp1 = "<div class='newDiv'>新加元素1</div>"; $("body").append(temp1); var temp2 = "<di...

2016-09-09 18:28:32

阅读数 1241

评论数 0

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