- 博客(75)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 通向码农的道路(从头写stl map 基本实现)
是不是向外科手术一样的精准,我们拿起锋利的刀子划开stl 坚韧的皮肤,在一刀下去,刨开它的肌理,掏出内脏,反复研究观察 终于掏挖除了原始的 console program 我们终于彻底了解了无所谓的程式!#include #include #include #include #include #include #include #include #inclu
2015-10-20 11:29:56
471
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 通向码农的道路(enet开源翻译计划 二)
http://enet.bespin.org 解析enet 双向链表(无placement new) enet本身就已经局限了4095 在线人数 如果有10000人同时在线,enet使用list来维护每次收发,不断的销毁,释放内存,性能实在太低。 enent写的根本不严谨,不管什么结构都存储双向链表,收一个包,我也需要去遍历,到底获取某peer。 enet_host_service 每
2015-07-12 00:19:58
1939
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 通向码农的道路(enet开源翻译计划 一)
Features: ENet evolved specifically as a UDP networking layer for the multiplayer first person shooter Cube.ENet 最初衷设计为了第一人称射击类游戏。为什么需要udp (参考,unix网络编程,如果不是为了进行多播,不要使用udp,我们应该使用tcp,让厂商来关注性能 )
2015-07-10 23:50:01
2303
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 带模板的顺序循环队列
#include#include#includeusing namespace std;templateinline void print(T* c){cout}templateclass SqQueueCy{protected:T *base;int front;int rear;int queuesize;public:S
2014-06-24 11:19:44
518
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 带模板的链队列
#include#include#includeusing namespace std;templateclass SqStack{private:T *base,*top;int stacksize;int Length;public:SqStack(int k=1){base = new T[k];assert(base!=NULL)
2014-06-24 10:38:19
563
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 顺序栈
#include#include#includeusing namespace std;templateclass SqStack{private:T *base,*top;int stacksize;public:SqStack(int k=1){base = new T[k];assert(base!=NULL);top = base
2014-06-23 19:47:50
457
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 循环链表,STL实现约瑟夫
#include#includeusing namespace std;struct ListNode{int num; //编号ListNode *next; //下一个/*ListNode(int n,ListNode *p){num = n;next= p;}*/};ListNode *listnode;//自定义链表实现
2014-06-23 15:42:48
734
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 抽象工厂的成就系统雏形
#include#include#includeusing namespace std;enum ACHIEVE_TYPE{ ACHIEVE_FIGHT_KILL_TYPE = 1, ACHIEVE_PARKOUR_COLLECT_TYPE = 2, ACHIEVE_CONSUM_TYPE = 3, ACHIEVE_CHALLENGE_T
2014-06-23 11:17:09
460
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 带模板双向链表插入
#include templatestruct DLNode{T data;DLNode *prior,*next;};templateclass DLinkList{private:DLNode *Head;DLNode* GetElemP(int i)const{int j=0;DLNode *p=Head;if(iret
2014-06-21 11:54:07
395
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 简单的工厂模式+一个抽象接口
templateclass CSingleton{private: static T m_oObj;public: static T& Instance() { return m_oObj; }};templateT CSingleton::m_oObj;#define SING
2014-03-31 19:56:34
377
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 linux信号(sigprocmask,sigpending)
【sigprocmask系统调用】功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。用法:#include int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);参数:how:用于指定信号修改的方式,可能选择有三种SIG_BLOCK //加入信号到进程屏蔽。SIG_UNBLOC
2014-01-19 00:11:51
783
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 运算符重载(四)带友元
#include class complex{public:complex() { real=imag=0; }complex(double r, double i){real = r, imag = i;}friend complex operator +(const complex &c1, const complex &c2);friend co
2014-01-16 15:28:32
468
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 运算符重载(三)不带友元
#include class complex{public:complex() { real=imag=0; }complex(double r, double i){real = r, imag = i;}complex operator +(const complex &c);complex operator -(const complex &c
2014-01-16 15:26:07
522
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 运算符重载问题(二)
/*#includeusing namespace std;class Love{private:int str; int agi; int intel;public: Love(): str(0), agi(0) , intel(0){} Love(int a , int b ,int c): str(a),
2014-01-16 15:01:22
521
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 通向码农的道路(-)
树篇为什么我们要学习数据结构?数据结构和数据库的区别在哪里?数据结构是解决计算机程序在内存中存储数据的一门学科,它是解决现实生活中非数值的程序设计问题。为什么数据结构这么难?因为现实生活都是以一对多,多对多的关系存在,而通过数据结构将这些抽象复杂的事物按照计算机内存的形式放在一条线性上,这就是组合数学所研究的对象。数据库是研究数据在硬盘上的存储过程以
2012-08-11 23:18:16
702
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 运算符重载问题
//重载运算符“+”,使之能用于两个复数相加。#include using namespace std;class Complex{public:Complex( ){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator+(Complex &c2);
2012-08-08 12:57:29
393
原创 通向码农的道路(开源 libevent min_heap 实现)
以前项目,我们在对应timer事件 ,传统都采取的 每帧循环 遍历队列所有数据,检测是否满足条件。比如( 海盗奇兵,部落冲突 ,都存在建筑升级,那么服务器再跑的时候 我如何知道,每个建筑什么时候升级成功,那我们只有每秒判断一次,但是这样的效率实在太低,如果每次服务器只需要判断一个节点?就知道所有事件,是否那些满足? 那么最小堆当之无愧了,我还是认为,服务器最终还是算法与数据结构问题,哪怕架构
2015-08-07 17:21:19
904
原创 c++ 链表
#include#includeusing namespace std;typedef struct student{int data;struct student *next;}node;class list{public:node * create(){node *head,*p,*s;int x,cycle = 1;head
2015-02-27 17:14:42
423
原创 带结构体的队列 进出实例
// MyQueue.cpp : 定义控制台应用程序的入口点。//实现链式队列(queue),包括一个头结点。队列操作包括在队头出队(pop)、在队尾入队(push)、//取得队头元素(front_element)、取得队尾元素(back_element)、队列元素个数(size)、//队列是否为空(empty)。#include using namespace std
2015-01-30 21:28:01
5137
原创 通向码农的道路(运镖系统,推荐算法)
#include #include #include #include #include #include #define Param 1000000using namespace std;template class SafeQueue{public:SafeQueue():m_size(0){}~SafeQueue
2015-01-27 11:50:34
486
原创 list实现的排行榜 针对游戏逻辑
/*#include #include #include using namespace std;#define MaxSortPlayer 100struct PlayerDamageInfo{int playerid;int damage;int count;}m_player[MaxSortPlayer];list m_list;map Sor
2015-01-22 20:06:22
727
转载 strcpy和memcpy的区别
strcpy和memcpy的区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需
2014-12-31 17:41:28
338
转载 msql MyISAM InnDB
MySQL数据库MyISAM和InnoDB存储引擎的比较MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData
2014-10-17 09:28:15
448
原创 通向码农的道路(面试官)
自从坤哥把我问的无地自容以后,我就知道了什么是高端职位面试了。让我来幻想下,作为一名面试官,特别是针对偏10K+的职位,会是这样的问题吗?A.为什么架构要设计成这样 B.如果要你的系统节省一半的机器你打算如何操作. C.如果希望提高你平台的吞吐量。D.你系统如何保证HA,(注意单点问题)E.你系统的分布是否合理,F.如果需要灰度升级,你设计的系
2014-09-30 23:15:51
492
转载 通向码农的四个阶段
下面是一位前辈总结的程序员成长四个阶段,个人觉得非常有道理,你在哪个阶段?阶段一:不知道自己不知道(Unconscious incompetence)大学期间,我和老师做过一些小项目,自认为自己很牛,当时还去过一些公司面试做兼职,但是就是不知道为什么没有回复。那个时期的我,压根不知道自己不知道,还以为自己懂很多,现在想起自己以前就好笑,那个时候还算不上程序员,顶多只能算是个业余编程爱好
2014-07-17 17:21:17
539
转载 如何防止死锁
以下內容為轉載:原文出自新浪愛問操作系统中有若干进程并发执行, 它们不断申请、使用、释放系统资源,虽然系统的进 程协调、通信机构会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能 继续运行,否则就阻塞的情况。此时,若不借助外界因素, 谁也不能释放资源, 谁也不能解 除阻塞状态。根据这样的情况,操作系统中的死锁被定义为系统中两个或者多个进程无限期
2014-07-02 18:01:57
442
转载 STL在服务器中的问题
当我问及一些同行的朋友对于服务器程序中STL的使用情况的时候,他们都回答在自己公司的服务器程序开发中,一般都不使用STL。 为何标准库在服务器程序开发环境中受到冷遇呢?我觉得在服务器程序这种高稳定性、高性能、高并发的环境下,STL存在着三大问题。 问题一:不能确定STL如何管理内存。假设就按照STL默认的方法来管理内容,则服务器在长时间的分配和释放内存后,容易导致内存碎片,对
2014-06-30 21:11:35
635
原创 对象所产生的构造函数,复制构造函数,析构,赋值函数
#include #include using namespace std;class Foo {public:Foo() {cout }Foo(const Foo&) {cout }Foo& operator= (const Foo&) {cout return *this;}~Foo() {cout }};int f(
2014-06-30 20:14:59
377
原创 二叉树的递归与非递归遍历
#include#include#include#includeusing namespace std;enum style {Pre, In, Post};templatestruct BiTNode{T data;BiTNode *ichild, *rchild;};templateclass BiTree{private:voi
2014-06-30 17:18:05
357
原创 带模板的二叉树包含递归遍历,与非递归,插入子树
#include#include#include#includeusing namespace std;templatestruct BiTNode{T data;BiTNode *lchild, *rchild;};enum style {Pre, In, Post};templateclass BiTree{private:void De
2014-06-27 11:39:54
421
原创 linux sigaction
#include #include #include void show_handler(int sig){ printf("I got signal %d\n", sig); int i; for(i = 0; i printf("i = %d\n", i); sleep(1); }}
2014-06-11 18:12:41
448
原创 Linux c++互斥锁
#ifndef _Lock_H#define _Lock_H#include #include using namespace std;//锁接口类class ILock{public:virtual ~ILock() {}virtual void Lock() {cout}virtual void Unlock(){
2014-06-07 15:38:53
1296
原创 单生产者,单消费者
/*单个生产者和单个消费者*/#include #include #include #include #include #include #define BUFFER_SIZE 5 //产品库存大小#define PRODUCT_CNT 50 //产品生产总数 struct produ
2014-06-07 15:37:48
597
2
原创 为什么要使用智能指针
# include using namespace std;class U_Ptr { friend class HasPtr; int *ip; size_t use; U_Ptr(int *p) : ip(p), use(1) { cout } ~U_Ptr() { de
2014-05-19 00:58:47
651
转载 内核态和用户态区别
内核态和用户态区别当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而
2014-05-16 19:57:06
1593
原创 指针数组和数组指针
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;
2014-05-09 14:34:02
284
转载 unix exec
(1)exec函数族说明fork 函数是用于创建一个子进程,该子进程几乎拷贝了父进程的全部内容,但是,这个新创建的进程如何执行呢?这个exec 函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这
2014-05-09 14:29:48
665
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人