- 博客(27)
- 收藏
- 关注
原创 C++:实现split分割字符串
#include #include void split(const std::string& src, const std::string& delim, std::vector& ret){ size_t last = 0; size_t index = src.find_first_of(delim, last); while (index != std::string::np
2016-05-16 14:13:20
507
转载 Sublime Text3 + Golang搭建开发环境
1.安装git 因为golang是通过git来管理远程包的,所以我们首先要安装git,下载地址:http://www.git-scm.com/download/。git安装比较简单,直接下一步即可(在Windows Explorer integration选项中将“Git Bash here”和“Git GUI here”打对勾),需要了解具体安装的可以看这里。
2015-11-28 18:16:57
628
转载 Linux网络编程并发服务器模型
链接地址:http://renwen0524.blog.163.com/blog/static/7301945520116116016141/
2015-10-19 15:56:03
475
转载 TCP/IP协议三次握手与四次握手流程解析
TCP/IP协议三次握手与四次握手流程解析一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占3
2015-10-15 11:41:34
502
转载 手游页游和端游的服务端的架构与区别
类型1:卡牌、跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器: 登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端。之后双方都用 HTTP通信,并用那个
2015-10-15 11:35:03
1000
转载 游戏后台定时器系统设计与实现
尽管如今游戏类型多种多样,各种玩法层出不穷,各种平台不断延伸,从游戏后台程序的角度来看,还是可以发现很多相通的地方。从数学模型上讲,任何程序都是一个状态机,准确的说是一个图灵机,总是在一边读写纸带一边机械地改变自身状态。 驱动游戏Server这台“机器”不断运转的因素,主要有两个方面,一个是消息,一个是时间。消息主要体现于客户端侧的玩家操作,同时也有Server之间的交互,以及对进程的信
2015-10-15 11:33:30
961
转载 从keep-alive原理分析TCP游戏服务端心跳包的实用功能
游戏服务器常常有心跳包的设计。 我们的心跳包就是为了防止Socket断开连接,或是TCP的连接断开吗? 答案是否定的,TCP连接的通道是个虚拟的,连接的维持靠的是两端TCP软件对连接状态的维护。 TCP 连接自身有维护连接的机制,说白了就是自身有长时间没有数据包情况下的判断连接是否还存在的检测,清除死连接,即使在没有数据来往的时候,TCP也就可以(在启动TCP这个功能
2015-10-15 11:21:46
1845
转载 C++拷贝构造函数和赋值构造函数
拷贝构造函数和赋值构造函数的异同由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String 的两个对象a,b 为例,假设a.m_data 的内容为“hello”,b.m_
2015-01-07 13:29:59
696
转载 内存中常见异常值的解释( 比如0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值 )
* 0xcccccccc : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory* 0xcdcdcdcd : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory
2014-12-12 15:11:58
5456
原创 派生类与基类的关系
1. 派生类对象对基类成员的访问权限(1)对于公有继承,只有基类的公有成员可以被“派生类对象”访问,其他(保护和私有)成员不能被访问。 (2)对于私有继承和保护继承,基类中所有成员都不能被“派生类对象”访问。 “派生类”对基类中成员的访问权限: (1
2014-12-10 11:27:35
1037
原创 函数指针
#include "stdafx.h"#include int ( *pFunc )( int, int );int Func( int x, int y ){ return x + y;}void main(){ pFunc = Func; int nSum = ( *pFunc )( 100, 100 ); std::cout << nSum << std::endl;
2014-11-25 11:33:23
592
原创 C++类成员变量的初始化方法
C++中类的成员变量初始化可以分为五种情况:1 普通的变量初始化可以在类的构造函数中直接赋值,也可以在类的初始化列表中初始化
2014-10-27 15:53:01
898
原创 C++预处理指令
1.#define#define OPEN_LOG //宏定义OPEN_LOG#define MAX_SIZE 100 //宏定义MAX_SIZE
2014-10-27 15:01:18
838
原创 C++类成员函数后加const含义
class CMyTest{public: CMyTest() : m_nNum( 0 ){}; ~CMyTest(){}; int Modify( int nNum ) const; void Print() const;private: int m_nNum;};
2014-10-27 11:54:20
954
原创 字符串反转
#include #include char *ReverseString(char *str){ if(str == NULL) return NULL; int length = strlen(str); for(int i = 0;i < length/2; ++i) { int temp = str[i]; str[i] = str[length - 1 - i
2014-04-13 20:36:31
599
原创 单向链表反转
typedef struct _Node{ int data; struct _Node *next;} Node;Node* Opposite(Node *head){ if(head == NULL) return NULL; Node *before,*middle,*after; before = NULL; middle = head; while(midd
2014-04-13 20:14:19
666
转载 虚析构函数的作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:
2014-04-09 22:42:46
650
转载 程序员屌丝的出路在哪?职业素养与契约精神
婚礼端午节,我最好的一个朋友,也就是常说的死党,结婚了。我从深圳专程飞回西安参加他的婚礼。虽然比不上开着跑车的富二代,但朋友家庭条件也算不错,婚礼举办得很隆重:花车,宝马760Li;迎亲车队,30辆黑色奥迪A6;当然,朋友自己的蒙迪欧今天就闲在车库里了。婚房,高档社区,精装修,180平,四房两厅。事后这哥们还补了一句,这房子以后还得空着,我老婆家还有一套房,上班近点儿,住那边。
2013-12-22 22:22:37
1178
原创 内存管理
判断这段程序,它的问题有哪些?#include #include #include void getmemory(char *p){ p = (char *)malloc(100);}int main(void){ char *str = NULL; getmemory(str); strcpy(str,"hello world!"); printf("%s",
2013-10-24 13:58:36
941
1
原创 带参数宏的使用
定义一个MIN宏,实现传递两个参数,返回最小值:#include #define MIN(a,b) a>b?b:aint main(void){ int min; min = MIN(3,4); printf("min = %d\n",min ); return 0;}有这样一段程序,程序的运行结果是:#include #define SORT(x)
2013-10-24 13:45:15
931
原创 编写C函数,判断链表是否是递增排列
有这样一个结构体:struct node{ int data; struct node *next;}编写一个C函数,来判断这段链表中data的值是否是递增排列的,代码如下:void func(ListNode *head){ while(head->next != NULL) { if(head->data next
2013-10-24 12:04:13
1524
1
原创 strcpy的拷贝问题
有一段小程序:#include #include int main(void){ char *ptr = "abc"; strcpy(ptr + 1,"B"); puts(ptr); return 0;}这段小程序会输出什么?它的输出结果是段错误,主要原因就是char *ptr = "abc"这条语句中的"abc"字符串存在于代码
2013-10-21 11:17:09
1131
原创 ls -l功能的实现
#include #include #include #include #include #include #include #include #define NAME_SIZE 128struct filename{ //定义一个结构体,用于存储文件名称 char name[NAME_SIZE];};void output_info
2013-10-19 18:45:11
1138
原创 写一段函数,计算无符号32位整数从高到低,第一个‘1’的位置。(例如,0x0F000000的第一个‘1’的位置为5)
使用2分查找的方法解决,从左到右查找“1”的位置。#include int func(unsigned int data){ int pos = 1; //用于计数,计录第一个“1”的位置 if((data & 0xffff0000) == 0) //如果data与高16位相与后为零,表示data高16位中不含有“1” {
2013-10-19 15:11:10
2207
原创 C语言实现一个FIBONACCI数发生器
#includelongfib_recursion(long num) //使用递归方法实现{ if(num == 1 || num == 2) return 1; else return fib_recursion(num - 1) +fib_recursion(num -2);}longfib_non_recursio
2013-10-19 15:07:25
1027
原创 链表反转的实现(递归反转链表,非递归反转链表)
不产生新的链表,请写一段函数将一个单向链表反转顺序:#include #include struct Node //创建一个结构体,存放值和指向下一个结点的指针{int value;struct Node *next;};typedef struct Node ListNode;ListNode *CreateList(int n)
2013-10-19 14:48:38
864
转载 链表(创建,插入,删除和打印输出)
/*-----------------------------------------------------------------------------文件功能:实现了动态建立一个学生信息的链表包括链表的创建、插入、删除、和打印输出学生信息包括姓名和分数本链表是带有头结点的,头结点的内容为空内容-------------------------------------------
2013-10-19 13:05:51
877
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人