数据结构——线性表
摘要:将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构(简称线性表)。数据存储的成功与否,取决于是否能将数据完整地复原成它本来的样子。对于线性表,不管是集中存放(顺序存储)还是分散存放(链式存储),数据的位置依旧没有发生改变。 使用线性表存储的数据,要求数据类型必须一致
阅读全文
数据结构入门
摘要:数据结构,主要就是学习“如何存储具有复杂关系的数据更有助于后期对数据的再利用”。 数据结构大致包含以下几种存储结构:线性表(可细分为顺序表、链表、栈和队列)、树结构(普通树,二叉树,线索二叉树等)和 图存储结构。 1、线性表 线性表结构存储的数据往往是可以依次排列的,具备“一对一”关系的数据就可以使
阅读全文
C指针
摘要:计算机中所有的数据都必须放在内存中,以二进制的形式存储在内存中,才能被CPU所使用。不同类型的数据占用的字节数不一样,为了正确地访问这些数据,必须为每个字节都编上号码。将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从 0 开始依次增加,对于 32 位环境,程序能够使用的内
阅读全文
TortoiseGit工具
摘要:1、安装 https://gitforwindows.org/官网下载Git;https://tortoisegit.org/download/下载TortoiseGit。 2、配置 1)创建或选择一个目录作为存放Git项目的目录,鼠标右键菜单栏的TortoiseGit-->Settings,打开配
阅读全文
Windows API——进程和线程函数
摘要:CancelWaitableTimer 功能:这个函数用于取消一个可以等待下去的计时器操作。计时器保持它当前的状态,而且除非用SetWaitableTimer函数明确启动,否则它不会重新启动 返回值:非零表示成功,零表示失败。会设置GetLastError 注意:适用Windows NT平台 Cal
阅读全文
Windows API——文件处理函数
摘要:CloseHandle 功能:关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的。 返回值:非零表示成功,零表示失败。会设置GetLastError 注意:除非对内核对象的
阅读全文
Windows进程间通信
摘要:Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信(InterProcess Communication, IPC),进程通信就是指不同进程间进行数据
阅读全文
编码方式
摘要:1、ANSI 多字节编码 最早时计算机只支持英文字符,都是用 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)编码,一个字母或符号只需要一个字节存储。微软针对本地化字符编码采用的就是用 ANSI(American
阅读全文
数据结构的堆和栈的概念
摘要:在数据结构中,栈是一种可以实现“先进后出”(或者称为“后进先出”)的存储结构。进栈的顺序和出栈的顺序是相反的。在实际编程中,可以通过两种方式来实现:使用数组的形式来实现栈,这种栈也称为静态栈;使用链表的形式来实现栈,这种栈也称为动态栈。 相对于栈的“先进后出”特性,堆则是一种经过排序的树形数据结构,
阅读全文
DLL基础
摘要:Windows API中的所有函数都包含在DLL中。3个最重要的DLL是: 1)Kernel32.dll:它包含用于管理内存、进程和线程的各个函数 2)User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数 3)GDI32.dll,它包含用于画图和显示文本的各个函数。
阅读全文
C++数据类型转换
摘要:一、其他类型转为字符串 1、数值型 1 itoa(i,temp,10); //将i转换为字符串放入temp中,最后一个数字表示十进制 2 ltoa(l,temp,10); //长整形转为字符串放入temp中,最后一个数字表示十进制 3 4 //浮点数 5 int decimal, sign; 6 c
阅读全文
多进程程序的特点
摘要:一、简介 进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。 进程是资源管理的最小单位,线程是程序执行的最小单位。进程管理着资源,而将线程分配到某个cpu上执行
阅读全文
服务程序原理和实现
摘要:1、什么是服务 在运行框中输入services.msc,服务窗口中显示的都是服务。 服务:是一种应用程序类型,它在后台运行。 系统有2种服务:一种叫win32服务,他运行在用户态,对应的映像文件是.EXE或.DLL;另外一种叫系统服务,它运行在内核态,对应的映像文件是.SYS也就是驱动程序。除了运行
阅读全文
C编写服务程序详细步骤
摘要:1、简介 Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。C++面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。 服务是一个运行在后台并实现勿
阅读全文
C编写服务程序
摘要:一、问题 1、[SC] OpenSCManager 失败 5:拒绝访问。 以管理员身份运行2、net start test发生系统错误 2。系统找不到指定的文件。 1)查看exe文件的路径是否正确?最好使用全路径。若修改服务路径可执行:sc delete 服务名,sc create 服务名 binP
阅读全文
Windows服务程序相关结构和函数
摘要:一、相关结构体 1、SERVICE_STATUS结构 定义了服务的运行状态/服务类型/接受的控制形式以及指定错误代码等 1 typedef struct _SERVICE_STATUS { 2 DWORD dwServiceType; //服务类型 3 DWORD dwCurrentState; /
阅读全文
Windows操作系统——相关概念
摘要:1、Windows API Windows应用程序编程接口(API):针对Microsoft Windows操作系统家族的系统编程接口。每个操作系统实现了Windows API的不同子集。Windows API包括几千个可调用的函数,可分为7类: ①基本服务 ②组件服务 ③用户界面服务 ④图形和多媒
阅读全文
CComPtr智能指针
摘要:1、简介 COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。但即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无
阅读全文
C++STL pair类模板
摘要:1、简介 要了解 STL 中的 pair 类模板,因为关联容器的一些成员函数的返回值是 pair 对象,而且 map 和 multimap 容器中的元素都是 pair 对象。 2、pair的定义 1 template <class_Tl, class_T2> 2 struct pair 3 { 4
阅读全文
C++deque双向队列
摘要:1、简介 deque 也是顺序容器的一种,同时也是一个可变长数组。要使用 deque,需要包含头文件 deque。所有适用于 vector 的操作都适用于 deque。 在 deque 中,随机存取任何元素都能在常数时间内完成(但慢于vector)。它相比于 vector 的优点是,vector 在
阅读全文
C++ STL关联容器
摘要:1、简介 关联容器内部的元素都是排好序的,有以下四种。 set:排好序的集合,不允许有相同元素。 multiset:排好序的集合,允许有相同元素。 map:每个元素都分为关键字和值两部分,容器中的元素是按关键字排序的。不允许有多个元素的关键字相同。 multimap:和 map 类似,差别在于元素的
阅读全文
C++list容器
摘要:1、双向链表简介 list 是顺序容器的一种。list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素。在 list 容器中,在已经定位到要增删元素的位置的情况下,增删元素能在常数时间内完成。list 容器不支持根
阅读全文
C++ STL Vector
摘要:1、简介 vector 是顺序容器的一种。vector 是可变长的动态数组,支持随机访问迭代器,所有 STL 算法都能对 vector 进行操作。要使用 vector,需要包含头文件 vector。 在 vector 容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多数情况下
阅读全文
C++STL stack栈
摘要:1、简介 stack 是容器适配器的一种。要使用 stack,必须包含头文件 <stack>。 stack就是“栈”。栈是一种后进先出的元素序列,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。栈内的元素不能访问。如果一定要访问栈内的元素,只能将其上方的元素
阅读全文
C++STL容器适配器
摘要:1、简介 STL 中的容器适配器有 stack、queue、priority_queue 三种。它们都是在顺序容器的基础上实现的,屏蔽了顺序容器的一部分功能,突出或增加了另外一些功能。 容器适配器都有以下三个成员函数: push:添加一个元素。 top:返回顶部(对 stack 而言)或队头(对 q
阅读全文
C++ STL map和multimap
摘要:1、map简介 map 是关联容器的一种,map 的每个元素都分为关键字和值两部分,容器中的元素是按关键字排序的,并且不允许有多个元素的关键字相同。 注意:不能直接修改 map 容器中的关键字。因为 map 中的元素是按照关键字排序的,当关键字被修改后,容器并不会自动重新调整顺序,于是容器的有序性就
阅读全文
C++ STL set和multiset
摘要:1、简介 set 是关联容器的一种,是排序好的集合(元素已经进行了排序)。set 和 multiset 类似,它和 multiset 的差别在于 set 中不能有重复的元素。multiset 的成员函数 set 中也都有。 不能直接修改 set 容器中元素的值。因为元素被修改后,容器并不会自动重新调
阅读全文
C++STL queue和priority_queue
摘要:1、简介 queue 和 priority_queue 都是容器适配器,要使用它们,必须包含头文件 <queue>。 2、queue queue 就是“队列”。队列是先进先出的,和排队类似。队头的访问和删除操作只能在队头进行,添加操作只能在队尾进行。不能访问队列中间的元素。queue 可以用 lis
阅读全文
C++STL容器和迭代器
摘要:1、简介 容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。程序员使用容器时,就是将容器类模板实例化为容器类,需要指明容器中存放的元素是什么类型的。 容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实
阅读全文
时间复杂度的计算
摘要:1、计算方法 假设计算机运行一行基础代码需要执行一次运算。 int main(int argc, char** argv) { printf("Hello, World!\n"); // 需要执行 1 次 return 0; // 需要执行 1 次}总共执行2次。时间复杂度为O(1). 把算法需要执
阅读全文
C++ STL算法
摘要:1、简介 在 STL 中,算法就是函数模板。STL 中的算法大多数是用来对容器进行操作的,如排序、 查找等。大部分算法都是在头文件 <algorithm> 中定义的,还有些算法用于数值处理,定义在头文件 <numeric> 中。 STL 提供能在各种容器中通用的算法(大约有70种),如插入、删除、查
阅读全文
C++强制类型转换运算符
摘要:1、简介 将类型名作为强制类型转换运算符的做法是C语言的老式做法,C++ 为保持兼容而予以保留。C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast、reinterpret_cast、const_cast 和 dynamic_cast。 强制类型转换是有一定风险的
阅读全文
C++ string类相关函数
摘要:1、简介 string 类是 STL 中 basic_string 模板实例化得到的模板类。其定义如下: typedef basic_string <char> string; basic_string 此处可以不必深究。 string 类的成员函数有很多,同一个名字的函数也常会有五六个重载的版本。
阅读全文
__declspec(selectany)
摘要:1、简介 __declspec是一个Microsoft Visual C++特定的编译器属性开关。括号中指明的是哪一个属性生效。关于__declspec的其他属性可以使用' __declspec'搜索MSDN进行查看。 selectany可以在.h文件中初始化一个全局变量而不是只能放在.cpp中。如
阅读全文
new-nothrow
摘要:1、使用场景 健壮性的分配方式 直接使用new (std::throw) xxx,判断NULL即可 普通的new若失败需要抛出异常(异常的类型std::bad_alloc),需要try块,若内存不足,再使用try也是浪费内存,也不会执行其后的if判断是否为NULL;new (std::throw)
阅读全文
Visual Studio打包过程
摘要:以VS2008为例。 1、新建安装部署项目 打开VS,在解决方案处右键点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定. 2、开始制作 2.1 双击"应用程序文件夹"在右边的空白处右击,选择添加->文件,将你的做的应用程序的可执行文件和相应的类库和组件添加进
阅读全文
C++ CString相关函数
摘要:一、CStrig函数 1、Find() 查找字符或字符串,返回字符所在的第一个位置,找不到返回-1 2、Remove() 删除特定的字符 3、TrimLeft()和TrimRight() TrimLeft()删除左边的对应字符,直至不匹配的字符出现 TrimRight()删除右边的对应字符,直至不匹
阅读全文
C++ CString类型转换
摘要:1、CString对象的连接 直接使用+号即可 2、CString --> int 使用_tcstoul()函数或者_ttoi()函数 3、CString <--> char* CString(_T("Gray")) + _T("Cat"); CString s("GrayCat");LPCTSTR
阅读全文
main()和_tmain()的区别
摘要:_tmain()的头文件是<stdafx.h>,是为了支持unicode所使用的main一个别名,是微软操作系统(windows)提供的对unicode字符集和ANSI字符集进行自动转换用的程序入口点函数。在<stdafx.h>中包含的<tchar.h>中定义,经过预编译后_tmain变成main。
阅读全文
DLL的创建、导出和加载
摘要:一、创建DLL项目 打开VS2008,点击File——>New——>Project——>Visual C++——>Win32 Console Application,填入工程名称,下一步,选择Application Type为DLL,Additional options为Empty project。
阅读全文
分析网络流量工具
摘要:一、Windows wireShark 主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。 1、安装 1)打开网址 http://www.wireshark.org,进入 Wireshark 官网 2)点击Download进入下载页面,选择合适的版本进行
阅读全文
Windows常用网络命令
摘要:1、Windows下常用网络操作 查询DNS、IP,mac地址及DHCP服务的情况 ——ipconfig ——不带任何参数选项,为每个已经配置了的接口显示IP地址、子网掩码和缺省网关值。 ——/all: 显示已配置且所要使用的附加信息(比如IP地址),并且会显示置于本地网卡中的物理地址(MAC);如
阅读全文