- 博客(42)
- 资源 (1)
- 收藏
- 关注
原创 C++ 构造/析构函数中调用虚函数的问题
测试用例#include "stdafx.h"using namespace std; class ClassA{public:ClassA(){coutPrint();cout}virtual void Print(){cout}virtual ~ClassA(){coutPrint();cout}};c
2015-06-23 11:28:34
1261
原创 windows同步和互斥总结
一、关键段(CRITICAL_SECTION)(非内核对象)使用关键段进行线程互斥时非常简单,只涉及到以下四个函数函数功能:初始化函数原型:void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);函数说明:定义关键段变量后必须先初始化。函数功能:销毁函数原型:void Dele
2015-06-16 19:47:23
838
转载 二叉树线索化
转自:http://blog.youkuaiyun.com/algorithm_only/article/details/6991254// TrreadBiTree.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using
2015-04-29 14:56:28
461
转载 算法之二叉树各种遍历
转自:http://blog.youkuaiyun.com/sjf0115/article/details/8645991树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个
2015-04-23 17:06:52
411
转载 数据结构--树的三种遍历(递归与非递归实现)
转自:http://blog.youkuaiyun.com/speedme/article/details/216598991:深度优先1.1:前序遍历Visit the root.Traverse the left subtree.Traverse the right subtree.如下图:Pre-order: F, B, A, D, C, E, G
2015-04-23 11:29:29
705
转载 彻底理解递归
递归真的非常非常重要!!!我们直接从例子开始吧!一:简单实例1.阶乘的实现写个函数实现 N! = N × (N-1) × (N-2) × ... × 2 × 1[java] view plaincopyprint?public static int factorial(int N) { if (N
2015-04-22 18:30:55
807
转载 数据结构第五章--数组和广义表
一、三元组顺序表假设以顺序存储结构来表示三元组表,则可得稀疏矩阵的一种压缩存储方式——我们成之为三元组顺序表。稀疏矩阵的三元组顺序表存储表示#define MAXSIZE 12500//假设非零元个数的最大值为12500typedef struct {int i, j; //该非零元的行下标和列下标ElemType e;}Triple;t
2015-04-22 10:25:36
992
转载 数据结构第四章--串
转自http://blog.youkuaiyun.com/v_july_v/article/details/7041827从头到尾彻底理解KMP作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。1. 引言 本KMP原文最初写
2015-04-21 14:05:50
684
转载 数据结构第三章-队列
转自http://blog.youkuaiyun.com/hguisu/article/details/76741951.队列1.1 队列定义 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front),队
2015-04-21 13:23:52
537
转载 数据结构第二章--线性表
一、概念 线性结构的特点是:在数据元素的非空有限集中,(1)存在唯一的一个被称做“第一个”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个之外,集合中的每个数据元素均只有一个前驱;(4)除最后一个数据之外,集合中每个数据元素均只有一个后继。二、线性表的应用实例例1:假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的
2015-04-20 17:33:23
694
转载 数据结构第二章--线性表链表
一、概念 线性结构的特点是:在数据元素的非空有限集中,(1)存在唯一的一个被称做“第一个”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个之外,集合中的每个数据元素均只有一个前驱;(4)除最后一个数据之外,集合中每个数据元素均只有一个后继。二、线性表的应用实例例1:假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的
2015-04-20 17:32:50
556
转载 数据结构第一章 绪论
一、基本术语:数据:在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。是计算机加工的原料。数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。数据对象:是性质相同的数据元素的集合,是数据的一个子集。数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。根据数据元素之间的不同的特性,通常有四类基本结构:集
2015-04-20 13:56:34
443
转载 队列的链接存储结构——链队列 图解和代码实现
转自:http://blog.youkuaiyun.com/ggxxkkll/article/details/8662954队列的链接存储结构——链队列 图解: LinkQueue.h[cpp] view plaincopy//LinkQueue.h #ifndef LINKQUEUE_H
2015-03-09 15:37:56
1116
转载 队列的顺序存储结构——循环队列 图解和代码实现
转自http://blog.youkuaiyun.com/ggxxkkll/article/details/8661569队列的顺序存储结构——循环队列循环队列的长度为(rear-front+QueueSize)%QueueSize队空的条件: front=rear队满的条件是: (rear+1)%QueueSize=front 图片详解:
2015-03-09 14:53:40
1086
转载 数据结构第三章-栈
转自:http://blog.youkuaiyun.com/hguisu/article/details/76741951.栈1.1 栈的定义栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:结论:后进先出(Last In First Out),简称为LIFO线性表。栈的基本运算有六种:
2015-03-09 11:15:36
555
转载 《Windows核心编程》——九 用内核对象进行线程同步
前言: 在用户模式下进行线程同步的最大好处就是速度非常快。与用户模式下的同步机制相比,内核对象的用途要广泛的多,内核对象唯一的缺点就是它们的性能。调用本章介绍的任何一个新函数时,调用线程必须从用户模式切换到内核模式。对于线程同步来说,这些内核对象中的每一种要么处于触发状态,要么处于未触发状态。比如进程创建时,进程内核对象为未触发状态;进程结束时,进程内核对象为触发状态,当进程内核对象被触
2015-01-08 17:18:00
652
转载 《Windows核心编程》——七 线程调度、优先级和关联性
前言 每个线程都有一个上下文(CONTEXT),后者保存在线程的内核对象中。这个上下文反映了线程上一次执行时CPU寄存器的状态。大约每隔20ms,Windows都会查看所有当前存在的线程内核对象。在这些对象中,只有一些被认为是可调度的。Windows在可调度的线程内核对象中选择一个,并将上次保存在线程上下文的值载入CPU寄存器。这一操作被称为上下文切换。Windows实际上会记录每个线程
2015-01-07 13:55:23
802
转载 《Windows核心编程》——六 线程基础
前言: 线程也有两部分组成: a.一个是线程的内核对象,操作系统用它来管理线程。系统还用内核对象来存放线程统计信息的地方 b.一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量 线程必然是在某个进程的上下文创建的,而且会在这个进程内部”终其一生“。这意味着线程要在其进程的地址空间内执行代码和处理数据。所以假如一个进程上下文中有两个以上线程运
2015-01-06 16:04:36
664
转载 《Windows核心编程》——五 作业
前言 Windows提供了一个作业(job)内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么。最好把作业对象想象成一个进程容器。但是,创建只包含一个进程的作业同样非常有用,因为这样可以对进程施加平时不能施加的限制。 如果进程已与一个作业关联,就无法将当前进程或者它的任何子进程从作业中去除。这个安全特性可以确保进程无法摆脱对它的限制。 关闭一个
2015-01-06 10:22:11
574
转载 《Windows核心编程》——四 进程
前言 一般将进程定义为一个正在运行的程序的一个实例,它由两部分组成: ①一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方 ②一个地址空间,其中包含所有可执行文件或dll模块的代码和数据。此外,它还包含动态内存分配,比如线程堆栈和堆的分配。 进程是有“惰性”的,进程要做任何事情,都必须让一个线程在它的上下文中运行。该线程负责执行进程
2015-01-05 17:11:14
843
转载 《Windows核心编程》——三 内核对象
前言内核对象用于管理进程、线程和文件等诸多种类的大量资源。3.1 何为内核对象内核对象包括访问令牌对象、事件对象、文件对象、文件映像对象、I/O完成端口对象、作业对象、邮件槽对象、互斥量对象、管道对象、进程对象、信号量对象、线程对象、可等待的计时器对象以及线程池工厂对象等。每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问。这个内存块是一个数据结构,其成员
2015-01-05 10:53:03
636
转载 《Windows核心编程》——二字符与字符串处理
Unicode的好处:Unicode会增加程序的执行性能,并为本地化工作奠定基础,有利于同COM和.Net Framework的互操作。2.1 字符编码用户一直在将文本字符串编码成一组以0结尾的单字节字符,并调用strlen,它会返回“以0结尾的一个ANSI单字节字符数组”中的字符数。但是一个字节最多只能表示256个符号。但是很多国家的文字超过256个符号。所以就有了双字节字符串,
2015-01-04 18:39:03
439
转载 Windows核心编程一 错误处理
DWORD iErrorValue; while(std::cin>>iErrorValue) { HLOCAL hlocal = NULL; // Buffer that gets the error message string // Use the default system locale since we look fo
2015-01-04 15:19:51
357
原创 插入一序列的key-value的map
template class MapAssign{public: typedef std::map Map; typedef std::pair Pair; typedef std::deque Deque; MapAssign(void) try : m_qPairs() { } catch (..
2014-10-13 16:28:53
484
原创 如何在windows下VC++使用protobuf
Protocol Buffers(protobuf)是Google提供的一个开源序列化框架,类似XML,JSON,其最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持c++、java、python等语言环境。通过将这些类包含在项目中,可以很
2014-03-31 11:28:06
1377
原创 PsExec连接远程机器的cmd
实用工具(如 Telnet)和远程控制程序(如 Symantec 的 PC Anywhere)使您可以在远程系统上执行程序,但安装它们非常困难,并且需要您在想要访问的远程系统上安装客户端软件。PsExec 是一个轻型的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。PsExec 最强大的功能之一是在远程系统和远程支持
2014-02-26 09:58:01
3383
转载 Pointer-to-Member Operators: .* and ->*
expression .* expression expression –>* expressionRemarksThe pointer-to-member operators, .* and –>*, return the value of a specific class member for the object s
2013-12-25 16:54:31
611
原创 define中#的作用
# 和 ## 操作符是和#define宏使用的. 使用# 使在#后的首个参数返回为一个带引号的字符串. 例如, 命令 #define to_string( s ) # s将会使编译器把以下命令 cout << to_string( Hello World! ) << endl;理解为 cout << "Hello World!" << endl;使用##连结##
2013-10-22 10:47:34
481
转载 C++右值引用
1、右值引用引入的背景临时对象的产生和拷贝所带来的效率折损,一直是C++所为人诟病的问题。但是C++标准允许编译器对于临时对象的产生具有完全的自由度,从而发展出了Copy Elision、RVO(包括NRVO)等编译器优化技术,它们可以防止某些情况下临时对象产生和拷贝。下面简单地介绍一下Copy Elision、RVO,对此不感兴趣的可以直接跳过:(1) Copy Elision Co
2013-10-10 13:45:40
764
原创 C++模板类推导
#include "stdafx.h"#include #include #include #include #include #include using namespace std;/// \class LimitedCast/// /// \brief LimitedCast is used to cast string to differen
2013-05-07 13:56:10
642
原创 线程安全的单例模式的实现
C++编程语言是一个应用广泛的计算机应用语言,它功能强大,在一定程度上大大提高了程序开发效率。C++单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。定义一个单例
2013-05-06 11:00:22
551
转载 揭秘 typedef四用途与两陷阱
typedef用来声明一个别名,typedef后面的语法,是一个声明。本来笔者以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数。罪魁祸首又是那些害人的教材。在这些教材中介绍typedef的时候通常会写出如下形式: typedef int PARA; 这种形式跟#define int PARA几乎一样,如前面几章所述,这些教材的宗旨是由浅入深,但实际做出来的行为却是以偏盖全。的确,
2013-04-18 10:28:32
421
转载 浅析C++中的define
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1.1 #define的概念#define命令
2013-04-09 10:17:38
627
原创 C++ 模板类
在C++中,模板类最主要是解决这样的一个问题:多个类的功能相同,只是由于数据类型不同而不得不重复定义几个相似的类,导致无用的工作量增大和代码量增多。模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。具体实例:实现对两个整数比较、两个浮点数比较。则我们要重复定义下面两个
2013-02-27 18:24:54
347
原创 类的静态成员
C++静态成员包括了静态数据成员和静态成员函数。这里主要总结下它们的用法、性质等。 一:静态数据成员 在类体中的数据成员的声明前加上关键字static,则该数据成员就成为了该类的静态数据成员。和类的其他数据成员一样,静态数据成员也遵循public/protected/private访问规则。同时,静态数据成员还有以下一些特点: 1.静态数据成员的定义。
2013-02-18 14:58:29
523
原创 UML六大类图关系
在看类图的时候,经常会看到类与类之间的连接线是不一样的,常见的连接线一般包括6种,不同的连接线也代笔着类与类之间不同的关系。概括如下:在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Gen
2013-01-24 11:02:32
514
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人