- 博客(84)
- 资源 (39)
- 收藏
- 关注
原创 BitSort (比特排序)
BitSort (比特排序) 适用于非负无重复数组的排序,特别是当数组元素个数较多的时候,该排序法无论在时间还是空间上都达到了很好的效果。用很小的空间实现大量数据的排序! 算法代码:/* 算法思想: 先将待排序非负无重复数组的各个元素映射到一段内存空间的各个bit上 (若某个bit上存在相应的元素,* 则该bit置为1,否则置为0),再从低地址到高地址遍历这段内存的所有值为
2013-03-31 21:16:26 1573
转载 银行有个存有n个用户编号的文件....输出:n个数升序排列....
/*银行有个存有n个用户编号的文件,每个数都小于n,其中n=10的7次方。每个编号都不重复。* 输出:n个数升序排列。* 约束条件:内存最多有2兆的空间,运行时间复杂度为O(n)。*/#include #include #define MAXSUM 312500 //312500 = (10000000 / 8 / 4)//表示 (0-->31) 的各个bi
2013-03-31 19:01:56 869
原创 交换两个变量的值,不使用第三个变量
/* 交换两个变量的值,不使用第三个变量*/#include using namespace std;void Swap1(int& a, int& b){ if(a < b) { a=b-a; b=b-a; a=b+a; } else { b = a - b; a = a - b; b = a + b; }
2013-03-31 15:30:31 946
原创 虚函数表指针 的位置
/* 虚函数表指针的位置: 判断当前编译器把虚函数表指针放在类的内存结构的最前面还是最后面*/#include using namespace std;class CObj{public: CObj(void){} virtual void Foo(void){} int m_nID;};int main(int
2013-03-31 14:59:49 1069
转载 RadixSort (基数排序)
基数排序,据说他的时间复杂度也是O(n),思路:没有计数排序那么理想,我们的数据都比较集中,都比较大,一般是4,5位。基本没有小的数据。那我们的处理很简单,你不是没有小的数据嘛。我给一个基数,例如个位,个位都是[0-10)范围内的。先对他进行归类,把小的放上面,大的放下面,然后个位排好了,在来看10位,我们也这样把小的放上面,大的放下面,依次内推,直到最高位排好。那么不就排好了吗?我们只需
2013-03-31 14:39:03 664
原创 CountSort (计数排序)
/* Sample: 计数排序* 计数排序是一种运行时间在输入的某种假设情况下可以为 O(n) 的算法,它的过程中没有比较环节。* 计数排序法是一种简单的排序方法,这种排序算法对一个待排序的数组进行排序,并将排序结果放到另一个新的数组中。* 计数排序算法针对待排序数组中的每个记录,扫描待排序的数组一趟,统计待排序数组中有多少个记录的值比该记录的值小。* 假设针对某一个记录,
2013-03-31 14:14:29 3577
转载 在二叉树中找出和为某一输入值的所有路径
//在二叉树中找出和为某一值的所有路径#include #include using namespace std;//树结构struct BTreeNode{ int m_nValue; BTreeNode *m_pLeft; BTreeNode *m_pRight;}*BiTree;//按照先序创建二叉树,0表示空BTreeNode *Cr
2013-03-31 13:05:28 847
原创 二叉树的遍历
二叉树是每个结点最多有两个子树的有序树。遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为
2013-03-31 11:56:24 632
原创 输出一串数字的全排列
/* 算法:输出数字串的全排列*/#include #include #include using namespace std;//删除str的第n个字符void DeleteCharAt(string& strSrc, int pos){ if (pos = strSrc.length()) { return; } string tm
2013-03-31 11:34:16 1946
原创 vector
/*Sample: 删除vector里的所有重复元素*/#include #include #include using namespace std;int main(int argc, char* argv[]){ vector intV; intV.push_back(13); intV.push_back(12); intV.push_ba
2013-03-31 10:52:02 571
原创 函数参数为 "char* p" 与 "char*& p" 的区别
#include using namespace std;void New(char*& p) //注意:这里的参数不能用"char* p",而必须要用"char*& p"。{ p = new char[32];}int main(int argc, char* argv[]){ char* p = NULL; New(p); strcpy(p, "
2013-03-31 10:18:42 3849
原创 ptr_fun
/* ptr_fun 是将一个普通的函数适配成一个仿函数(functor).* (Convert function pointer to function object)* 下面的例子使用 ptr_fun 将普通函数(两个参数, 如果有多个参数, 要改用boost::bind)适配成bind1st或bind2nd能够使用的functor,* 否则对bind1st或bind2nd直
2013-03-30 19:21:26 831
原创 not1 & not2
#include #include #include #include using namespace std;int main(){ vector coll; for(int i = 1; i <= 13; ++i) { coll.push_back(i); } //查找元素值 小于等于10 的元素的个数 //也就是使得 !(10 < e
2013-03-30 18:31:49 1746
原创 bind1st & bind2nd
#include #include #include #include using namespace std;int main(){ vector coll; for(int i = 1; i <= 13; ++i) { coll.push_back(i); } //查找元素值大于10的元素的个数 //也就是使得10 < elem成立
2013-03-30 18:05:58 602
原创 predicates (from functional.h)
#include #include #include using namespace std;int main () { int numbers[]={20,40,50,10,30}; sort(numbers, numbers+5, greater() ); //Result: 50 40 30 20 10 //sort(numbers, numbers+5
2013-03-30 17:41:34 668
原创 iterator (迭代器)
除了使用下标来访问vector对象的元素外,标准库还提供了另一种检测元素的方法:使用迭代器(iterator)。迭代器是一种允许程序员检查容器内元素,并实现元素遍历的数据类型。标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更一般化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代C+
2013-03-30 16:48:34 710
原创 size_t 的陷阱
#include using namespace std;int main(int argc, char* argv[]){ size_t t = 1; int z = -1; /*注意:t是size_t类型的,size_t是unsigned类型,int型是有符号,结果就很妖怪的没有进入if里面。 结果你会发现,编译器把有符号的z转换成了无符号的z,也就变成
2013-03-30 13:46:47 719
原创 size_type 的陷阱
#include #include using namespace std;int main(int argc, char* argv[]){ vector nVec; for(int i = 1; i <= 5; i++) { nVec.push_back(i); } /* 注意:这里t不会从0变到-1,因为size_type是unsigned类
2013-03-30 13:39:14 554
原创 size_type & size_t
sizt_t 是C++的一个标准的typedef. 全局有效,定义在全局名称空间中。size_type 是STL定义的,只在namespace std中有效。 1. size_type (容器类型的size()返回size_type类型,它是一个unsigned类型):由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类
2013-03-30 13:36:57 730
原创 mem_fun & mem_fun_ref
mem_fun、mem_fun_ref 的作用: 将一个"成员函数指针"包装成一个仿函数(函数对象)。 问题:有一个用户信息类CUserInfo,包括一个类成员函数initdata(用于初始化用户数据),代码如下:class CUserInfo{public:void initdata(void){// ...}};假设有一个列表存放所有的用户数据:
2013-03-28 23:56:28 657
原创 sort
/*sort模板有两种:---------------------------------------------------------------------template void sort(RanIt fist, RanIt last);template void sort(RanIt fist, RanIt last, Pred pr);--
2013-03-28 23:36:47 531
原创 count_if
/*count_if :返回区间中满足指定条件的元素数目。template typename iterator_traits::difference_type count_if( InputIterator _First, InputIterator _Last, Predicate _Pred );
2013-03-28 23:10:12 637
原创 find_if
/* find_if函数包含三个参数,前两个指出查找范围,第三个参数是一个函数指针或者函数对象。 find_if的作用是:在容器范围内,返回一个使第三个参数所指函数为真的元素的迭代器。*//* find_if的STL定义: template InputIterator find_if(InputIterator first, InputIterator la
2013-03-28 22:47:25 1045
原创 头文件 algorithm 中的常用函数
algorithm意为"演算法", 是C++的标准模版库(STL) 中最重要的头文件之一,提供了大量基于迭代器的非成员模版函数。库函数:accumulate 累加序列的所有元素adjacent_difference 计算序列中的相邻元素是否不同adjacent_find 查找相邻的两个相同(或者有其他关联)元素any_of 如果对于任意元素的谓词测试都为true,则返回true
2013-03-28 22:01:22 1435
原创 RAII
1.什么是RAII ?RAII 的全称是“Resource Acquire Is Initial”。这是C++创始人Bjarne Stroustrup发明的词汇,比较令人费解。说起来,RAII的含义倒也不算复杂。用白话说就是:在类的构造函数中分配资源,在析构函数中释放资源。这样,当一个对象创建的时候,构造函数会自动地被调用;而当这个对象被释放的时候,析构函数也会被自动调用。于是乎,一个对象的生
2013-03-26 11:20:33 1315
原创 CreateThread、_beginthreadex、AfxBeginThread 详解
在Windows的多线程编程中,创建线程的函数主要有CreateThread,_beginthead(_beginthreadex)和AfxBeginThread,那么它们之间有什么联系与区别呢?当我需要创建一个线程时该用哪个函数呢? 一、各个函数的用法:1. CreateThread:函数原型:HANDLE WINAPI CreateThread(_in LPSECURI
2013-03-25 23:28:02 1588
转载 CreateThread、_beginthreadex、AfxBeginThread 区别
按:创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整合。 【参考1】CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别=================================================================
2013-03-25 21:41:34 798
转载 C Runtime Library来历, API, MFC, ATL关系
CRT原先是指Microsoft开发的C RuntimeLibrary,用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。 CRT原先的目的就是支持操作系统的运行。因为Windows操
2013-03-25 20:32:27 644
原创 "尾随数据"
//DataSource.h#ifndef _DATASOURCE_H#define _DATASOURCE_Hstruct tagData{ int nID; double dValue; char szRef[128];};void ProvideDataSource(tagData* data){ static int id = 0; data->nID =
2013-03-25 17:23:27 717
原创 WinSock的五种I/O模型
1、 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字 默认为阻塞模式。可以通过多线程技术进行处理。 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误。但功能强大。为了解决这个问题,提出了进行I/O操作的一些I/O模型
2013-03-24 22:14:46 1370 1
原创 SleepEx
函数原型:DWORD WINAPI SleepEx(DWORD dwMilliseconds,BOOL bAlertable);说明:SleepEx函数中止当前线程运行直到指定的条件被触发。当以下任意一点出现时,当前线程将恢复运行。● I/O回调函数被调用● Asynchronous Procedure Call(APC)异步函数被插入线程● 当前线程休眠时间超过最小超时值
2013-03-24 21:24:14 3311
原创 MAKEWORD
MAKEWORD 宏 平台:SDK 这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。 (注:typedef unsigned short WORD;) WORD MAKEWORD( BYTE bLow, //指定新变量的低字节序; BYTE bHigh //指定新变量的高字节序; ); 例如: W
2013-03-24 18:00:46 1425
原创 OnClose和OnDestroy
OnClose():消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候(而不是我们眼睛所见的对话框从屏幕上消失时),该函数被调用。用户在响应OnOk()或者OnCancel()函数之后,不会发送WM_CLOSE消息。OnDestroy():消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时被发送。在单视图程序中,根据>所讲,程序退出时执行的操作顺序为 (
2013-03-24 17:51:39 2418
转载 IOCP模型与EPOLL模型的比较
IOCP模型与EPOLL模型的比较一:IOCP和Epoll之间的异同。异:1:IOCP是WINDOWS系统下使用。Epoll是Linux系统下使用。2:IOCP是IO操作完毕之后,通过Get函数获得一个完成的事件通知。Epoll是当你希望进行一个IO操作时,向Epoll查询是否可读或者可写,若处于可读或可写状态后,Epoll会通过epoll_wait进行通知。3:I
2013-03-24 13:35:32 753
原创 WinSock IO模型一: select 模型
Select模型是最常见的I/O模型。使用 int select( int nfds , fd_set FAR* readfds , fd_set FAR* writefds,fd_set FAR* exceptfds,const struct timeval FAR * timeout ) ;函数来检查你要调用的Socket套接字是否已经有了需要处理的数据。 select包含三个
2013-03-24 12:55:29 673
原创 WinSock IO模型五: 完成端口
众所皆知,完成端口是在WINDOWS平台下效率最高,扩展性最好的IO模型,特别针对于WINSOCK的海量连接时,更能显示出其威力。众所皆知,完成端口是在WINDOWS平台下效率最高,扩展性最好的IO模型,特别针对于WINSOCK的海量连接时,更能显示出其威力。其实建立一个完成端口的服务器也很简单,只要注意几个函数,了解一下关键的步骤也就行了。这是篇完成端口入门级的文章,分为以下几步来说
2013-03-24 12:30:46 900
原创 WinSock IO模型四: 重叠I/O (完成例程)
完成例程模型相比与事件通知模型有个很大的优点就是不再受64个消息的限制,一个线程可以同时管理成百上千个socket连接,且保持较高的性能。 完成例程相比与完成端口较为逊色,因为它的性能不能随着系统CPU数量的增长而线程增长,不过在我看来已经很强了,呵呵~! 说白了,这些连接都是由系统来帮你管理的。你只需做的一件事就是:开启一个线程来accept进来的连接,剩下的工作交由系统来处理。而你,则
2013-03-24 12:12:11 1191
原创 WinSock IO模型四: 重叠I/O (事件通知)
目录:1. 重叠模型的优点2. 重叠模型的基本原理3. 关于重叠模型的基础知识4. 重叠模型的实现步骤5. 多客户端情况的注意事项 一. 重叠模型的优点1. 可以运行在支持Winsock2的所有Windows平台 ,而不像完成端口只是支持NT系统。2. 比起阻塞、select、WSAAsyncSelect以及WSAEventS
2013-03-24 11:29:46 1107
原创 ZeroMemory、memset和 “={0}” 的区别
ZeroMemory和memset的区别:1、ZeroMemory是微软的SDK提供的,memset是属于C Run-time Library提供的。因此ZeroMemory只能用于Windows系统,而memset还可用于其他系统。2、ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部其实是用 memset实现的,而memset除了对内存进行清零操作,还可以将内存置成别
2013-03-24 10:51:58 1048
原创 如何从dll中导出C++类
说明:新建两个工程,其中一个是dll工程(我的示例程序中这个工程名为DllClass),另一个是测试和使用dll的工程(名字为DllClassTest)。注意点: 1。Dll工程编译完成后,将.lib和.dll文件拷贝到测试和使用dll的工程的适当目录下(我的程序是release目录),然后将Dll工程中的导出类的头文件(以下简称头文件)拷贝到测试和使用dll的工程的适当目录下(在
2013-03-23 21:43:24 917
网络商城+论文+源码 购物系统jsp ssh mvc java web j2ee毕业设计
2017-02-13
酒店管理 预订系统+源码jsp ssh mvc java web j2ee论文 毕业设计
2017-02-13
OA 办公自动化系统+论文+源码jsp ssh mvc java web j2ee毕业设计
2017-02-13
目录文件实时同步备份工具
2015-01-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人