- 博客(47)
- 收藏
- 关注
转载 cocos2dx 3.0rc如何创建项目
转自官网的文档。How to Run cpp-tests on win32In this article, I will show you how to run cpp-tests on your windows PC.Environmental RequirementsCocos2D-X version: cocos2d-x v3.0 (https://github.
2014-05-08 14:45:48 867
转载 C++ 模板详解(一)
C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同的函数; 类模板针对仅数据成员和成员函数类型不同的类。 使用模板的目的就是能够让程序员编写与类型无关的代码。
2014-05-05 18:54:24 765
转载 C++模板学习
1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float
2014-05-05 17:05:08 567
转载 数据库引擎
数据库应用项目是通过数据库引擎与数据库链接的。何为数据库引擎呢?简而言之,数据库引擎就是驱动各种数据库的程序,它负责处理数据库相关工作的整个核心部份。同样的,数据库应用项目的操作指令,均会通过数据库引擎的处理作用到数据库上。计算机经过几十年的发展,在其上开发成熟的数据库产品已经有很多种,但他们之间很难互相连接与访问,这给用户和应用软件开发商带来极大的不便。为了解决该问题,各大软件公司纷纷推出自
2014-05-04 16:00:19 541
转载 类前置声明和包含头文件区别
一、类嵌套的疑问C++头文件重复包含实在是一个令人头痛的问题,假设我们有两个类A和B,分别定义在各自的头文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的: class B;class A{ public: B b;};class B{ public:
2014-04-22 11:26:58 504
原创 fatal error C1083: 无法打开预编译头文件:“Release\test.pch”: No such file or directory
解决方法:右键点击你创建的项目,选择“属性标签”点击属性,弹出“项目属性页”,在左侧找到以下位置 配置属性 --> C/C++ --> 预编译头,并选择它:在右边的菜单中选择 “创建/使用预编译头”中的“不使用预编译头文件”点击“确定”按钮退出即可原因分析 编译器一般都是以文件为单位进行编译,如果修改了工程中的一个文件,那么将导致所有文件都要从新编译,这样的编译将耗费很长时间。
2014-04-18 10:13:23 5238
原创 序列化和反序列化
概述 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途:
2014-04-16 19:34:39 507
转载 函数指针的好处
一般的时候用不到,主要还是一个简化结构和程序通用性的问题,也是实现面向对象编程的一种途径。简单的总结为:1. 实现面向对象编程中的多态性2. 回调函数举两个例子:1. 你现在要实现一个文件系统,但是文件的介质有硬盘和软盘,那么它们各自的读写函数实现肯定是不一样的。好比 int a_write(char *data_stream,
2014-04-14 22:44:36 854
转载 函数指针的作用
函数指针及应用我们先来看一下以下 的声明:int f(int);int (*pf)(int)=&f;//&操作符可选;因为函数名被使用时总是由编译器把它转换为函数指针;int ans;ans=f(25);ans=(*pf)(25);ans=pf(25);//间接访问操作并非必需,因为编译器需要的是一个函数指针;*********************
2014-04-14 22:42:17 621
转载 函数指针作参数的作用
函数指针作参数的作用查了很多资料,理解上有一定的难度,有的说作为一个接口,我知道人家说得没错,但作为初学者,当时怎么也理解不了,现在我把我个人的理解作一个说明,忘高手指教,感谢中!作为一个接口,其实就是留个空间让你填上相应的功能。比如,有两个整数a和b,现在是a和b参与一个运算,具体什么运算,由你自己决定,可以这样写一个程序:先定义一个由函数指针作参数的函数: int
2014-04-14 22:30:41 797
转载 网络游戏服务器架构
网络游戏一般采用C/S结构,客户端负责绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的画面绘制,客户端与服务器通过网络数据包交互完成每一步游戏逻辑。网关服务器方式,主要职责是将客户端通信和游戏服务器隔离。网关服务器只负责解析数据包、加解密、超时处理、过滤错误包,客户端只需建立和网关服务器的连接即可进入游戏,无需与游戏服务器直接连接。
2014-04-10 22:26:47 1087
原创 二叉树的非递归遍历
能递归实现的一般都可以用栈来实现,因此可以用栈来实现二叉树的非递归遍历。以下图的二叉树为例:1、先序遍历:首先把根结点入栈,然后根结点出栈(访问结点),在出栈的同时将其右左孩子进栈,再把栈顶元素出栈(访问结点),同时将其右左孩子入栈,如此反复知道栈为空。typedef struct node{ int data; struct node *lchild,*rchi
2014-03-28 17:10:20 652
原创 二叉树的递归遍历
结点定义:typedef struct BTree{ DataType data; struct BTree* lchild,rchild;}; 1、先序遍历:从根节点开始,沿左子树一直找到没有左孩子的结点,依次访问Visit所经过的结点,同时经过的结点进栈,当找到没有左孩子的结点时,从栈顶退出该结点。此时该结点的左子树已访问完毕,再用上述方法遍历该结点的右子树,如果反复直到栈
2014-03-28 09:20:19 601
转载 GDB简单使用
一、GDB的静态调试启动方法:1、当需要在命令行通过gdb来启动可执行程序的时候,可使用一下命令:gdb 这个时候gdb会加载可执行程序的符号表和堆栈,并为启动程序作好准备;接下来,需要设置可执行程序的命令行参数:set args 然后设置断点: b或break;最后通过命令r或run来启动程序,或者通过c或continue命令来继续已经被暂停的程序;2、当程序co
2014-03-28 09:02:39 669
转载 Linux信号与信号处理
信号(signal) 是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令( 即信号 ) 。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。进程收到一个信号后,会检查对该信号的处理机制。如果是SIG_IGN ,就忽略该信号;如果是SIG_DFT ,则会采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了
2014-03-28 08:59:28 1252
转载 linux内核系统调用和标准C库函数的关系分析
今天研究了一下系统调用和标准库函数的区别和联系,从网上搜集的资料如下:资料引用分割线(红字为自己批注的重点和总结)《=================================================================================================================================》
2014-03-27 21:54:21 1905
转载 一个不错的shell 脚本教程 入门级
一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂详细出处参考:http://www.jb51.net/article/28514.htm建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多
2014-03-27 21:45:35 663
原创 vector
vector应该是最常用的容器之一了,它和数组一样,需要维护一个连续的存储空间,但与数组不同的是,vector在空间运用上更灵活,其内部实现已经封装了对存储空间的分配以及对数据元素的操作,用户只需要调用相应的接口就可以实现一般的操作。vector实现技术的关键在于对空间大小的控制以及重新配置时的数据移动的效率。虽然相对数组来说vector操作更加灵活,但是由于其存储特性,在其内部实现中仍然像数组一
2014-03-26 14:21:17 582
转载 epoll学习笔记(ET模式下事件触发原理和数据收发存在的问题)
这篇文章所讲的例子和情况可以结合《epoll的LT模式和ET模式 》这篇看。epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的 select/poll操作,只要还有没有处理的事件就会一直通知.以代码来说明问题:首先给
2014-03-25 17:34:38 1877
转载 多进程服务器中,epoll的创建应该在创建子进程之后
看我的测试代码,似乎应该是在创建子进程之后创建epoll的fd,否则程序将会有问题,试将代码中两个CreateWorker函数的调用位置分别调 用,一个在创建epoll fd之前,一个在之后,在调用在创建之前的代码会出问题,在我的机器上(linux内核2.6.26)表现的症状就是所有进程的epoll_wait函数 返回0, 而客户端似乎被阻塞了:服务器端:#include
2014-03-25 17:25:22 692
转载 epoll学习:思考一种高性能的服务器处理框架
1、首先需要一个内存池,目的在于:·减少频繁的分配和释放,提高性能的同时,还能避免内存碎片的问题;·能够存储变长的数据,不要很傻瓜地只能预分配一个最大长度;·基于SLAB算法实现内存池是一个好的思路:分配不同大小的多个块,请求时返回大于请求长度的最小块即可,对于容器而言,处理固定块的分配和回收,相当容易实现。当然,还要记得需要设计成线程安全的,自旋锁比较好,使用读写自旋锁就更好
2014-03-25 17:11:29 582
原创 man epoll上的几个问题
Q1 What happens if you add the same fd to an epoll_set twice? 如果你把相同的文件描述符添加到epoll中两次会发生什么?A1 You will probably get EEXIST. However, it is possible that two threads may add the same fd twice. This
2014-03-25 16:50:37 1517
转载 epoll的LT模式和ET模式
man page:http://linux.die.net/man/4/epollepoll事件分发系统可以运转在两种模式下:ET(边缘触发模式)和LT(水平触发模式)。接下来说明这两种模式的不同之处,假设一个环境如下:1、我们已经把一个用来从管道中读取数据的文件句柄(RFD)添加到epoll描述符2、这个时候从管道的另一端被写入2K的数据3、调用epoll_wait(),并且
2014-03-25 16:02:34 1063
转载 Linux GCC常用命令
转自http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html1简介2简单编译2.1预处理2.2编译为汇编代码(Compilation)2.3汇编(Assembly)2.4连接(Linking)3多个程序文件的编译4检错5库文件连接5.1编译成可执行文件5.2链接5.3强制链接时使
2014-03-25 10:07:32 451
转载 一个epoll例子(二)
/* 使用 epoll 写的回射服务器将从client中接收到的数据再返回给client */ #include #include #include #include #include #include #include #include #include #include #include using namespace std
2014-03-25 10:03:24 717
转载 一个epoll例子(一)
摘自网络的一个例子:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAXBUF 1024#defin
2014-03-25 09:22:00 522
原创 排序算法
1、选择排序:以升序为例,第一次找出最小的数放在第一个位置,第二次找出剩下元素中最小的数放入第二个位置,依此类推,知道最后一个元素。最好情况是本来就有序,此时需要交换0次,最差情况是逆序,此时需要交换n-1次,总体复杂度O(n*n)。void SelectSort(int a[],int iLen){ int i = 0; int j = 0; int iMin = 0; int i
2014-03-24 22:35:09 447
原创 凑数
给出一个数组,比如{1,3,6,9,13,8},如果其中两个数的和是14,则将这两个数删除,输出剩下的数字。#include #include #define SUM 14int comp ( const void *a, const void *b ){ return * ( int * ) a - * ( int * ) b;}int main(){ int
2014-03-21 12:27:51 1387
原创 找出数组中只出现一次的数字
数组中只有一个数出现一次,其他的数都出现2次,找出出现一次的数字,要求O(n),不使用辅助空间。#include void PrintArry(int a[],int len){ int i = 0; for (; i < len; i++) { printf("%d ",a[i]); } printf("\n");}int fun(int a[],int len)
2014-03-21 12:17:28 548
原创 判断一个整数x是否可以表示成n(n>=2)个连续正整数的和
这类问题一般需要先转化成数学模型,然后根据条件来实现。设最小的数为m,则x=m+(m+1)+(m+2)+....+(m+n-1),求出m = (2x-n*n+n)/(2n),m为正整数且m
2014-03-21 11:08:38 1313
原创 一个长度为n的数组,其每个元素的值为1、2、3三个数之一,将数组排序
要求O(n)且不使用辅助空间,还要有一定的扩展性#include void swap(int *a,int *b){ int tmp = *a; *a = *b; *b = tmp;}void sort(int a[],int len){ int i = 0;//从前向后指向第一个不为1的数 int j = 0;//从前向后指向第一个不为2的数 int k = l
2014-03-20 23:04:17 1270
原创 将一句话中的单词进行倒换,标点符号不倒换,要求不使用辅助空间
比如一个字符串“this is a test.”,将其反转后为"test. a is this"。#include #include void ReverseString(char str[],int start,int end){ if (NULL == str || start > end) { return; } char c = ' '; while (star
2014-03-20 19:16:50 617
转载 socket阻塞与非阻塞,同步与异步、I/O模型
socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一
2014-03-18 17:06:58 484
原创 epoll用法
以下内容整理自网络。1、epoll的优点:(1)支持一个进程打开大数量的socket描述符(FD),这个数目和系统的内存有关,可以查看/proc/sys/fs/file-max来查看;(2)epoll只对活跃的socket进行操作,而不必轮询所有的描述符,因此IO效率不会随着FD的增加而线型下降;(3)epoll使用mmap使内核和用户空间共享同一块内存,可以加快内核与用户空间之间
2014-03-18 10:53:57 746
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人