自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

转载 如何阅读源代码

我们在写程式时,有不少时间都是在看别人的代码。 例如看小组的代码,看小组整合的守则,若一开始没规划怎么看, 就会“噜看噜苦(台语) ” 不管是参考也好,从开源抓下来研究也好,为了了解箇中含意,在有限的时间下,不免会对庞大的源代码解读感到压力。 网路上有一篇关于分析看代码的方法,做为程式设计师的您,不妨参考看看, 换个角度来分析。 也能更有效率的解读你想要的程式码片段。 

2013-11-29 14:44:41 872 1

转载 结构体中数组放在最后位置的问题

以下出自“C Programming FAQS”.先看下面的代码:struct name { int namelen; char namestr[1];};struct name *makename(char *newname) { struct name *ret = malloc(sizeof(struct name) - 1 + strlen(newname) + 1);

2013-11-20 22:05:29 1986

原创 memset的实现及改进

memset的实现及改进memset函数,用"byte"的值填充内存void *mymemset(void *pv, byte b, int size) { byte *pb = (byte *)pv; while(size-- > 0) *pb++ = b; return (pv);}但是许多计算机上通过先将要填充到内存块中的小值拼成较大的数据类型,然后用拼出的大值填

2013-11-08 23:26:47 1020

原创 memcpy函数的实现及改进

memcpy函数的实现及改进memcpy主要是用来拷贝不重叠的内存块。下面一步步的来改进memcpy的实现。最初的解决方法是使memcpy对NULL指针进行检查,如果指针为NULL,就给出一条错误信息,并中止memcpy的执行。#include typedef unsigned char byte;void *mymemcpy(void *pvTo, void *p

2013-11-08 21:07:28 1380

原创 c++资源管理-----RAII

c++资源管理-----RAII         资源就是一旦使用了它,将来必须还给系统。如果不这样,糟糕的事情就会发生。C++程序中最长使用的资源是动态分配内存。但内存只是你必须管理的众多资源之一。其他的资源还包括文件描述器(file description)、互斥锁(mutex locks)、图形界面中的字形和笔刷、数据库连接以及网络socket。不论那一种资源,重要的是,当你不再使用时,

2013-11-08 10:57:03 1182

转载 c++内存管理之三------常见的内存错误及其对策

c++内存管理之三------常见的内存错误及其对策常见的内存错误及其对策如下:1.内存分配未成功,却使用了它解决办法是在使用内存之前检查指针是否为NULL。如果p是函数的参数,那么在函数入口处用assert(p != NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p == NULL)或者 if(p != NULL)进行防错处理。2.内存分配虽然成功,但是

2013-11-06 17:09:54 818

转载 C++内存管理之二--------控制c++的内存分配

C++内存管理之二--------控制c++的内存分配一个防止堆破碎的通用方法是从不同固定大小的内存池中分配不同类型的对象。对每个类重载new和delete就提供了这样的控制。1.重载全局的new和delete操作符void * operator new(size_t size) { void *p = malloc(size); return p;}void operat

2013-11-06 16:27:13 691

转载 C++内存管理之一---------内存分配方式

C++内存管理之一---------内存分配方式1.内存分配方式简介在C++中,内存分为5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时这些存储单元自动释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。堆,由new分配的内存块,它们的释放编译器不去管,由我们的应用

2013-11-06 15:57:00 809

原创 tcp客户/服务器回射程序之五-----用shutdown函数解决在批量方式下所引起的问题

tcp客户/服务器回射程序之五-----用shutdown函数解决在批量方式下所引起的问题

2013-11-04 22:06:14 785 1

原创 tcp客户/服务器回射程序之四-----select函数的使用

tcp客户/服务器回射程序之四-----select函数的使用

2013-11-04 15:12:24 1203

原创 tcp客户/服务器回射程序之三-----数据格式

tcp客户/服务器回射程序之三-----数据格式在客户与服务器之间传送的数据格式一般有文本串和2进制结构两种。1.在客户与服务器之间传送文本串        修改服务器程序,它仍然从客户读入一行文本,不过新的服务器期望该文本行包含有空格分开的两个整数,服务器返回这两个整数的和。不论客户和服务器主机的字节序如何,这个新的客户和服务器程序对都工作的很好。void str_ech

2013-11-04 11:36:10 775

原创 可变参数列表

可变参数列表1.stdarg宏       可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏-------va_start, va_arg和va_end。我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值。如下面的代码:/* * average.c * * Crea

2013-11-04 10:34:41 790

原创 数组和指针的区别

数组和指针的区别   声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始位置。声明一个指针变量时,编译器只为指针本身保留内存空间,它并不为任何整形值分配内存空间。而且,指针变量并未被初始化为任何指向任何现有的内存空间。如果它是一个自动变量,它甚至根本不会初始化。如int a[5];   int *b;这个声明之后,表达式*

2013-11-04 09:16:46 710 1

原创 tcp客户/服务器回射程序之二-----处理SIGCHILD信号

tcp客户/服务器回射程序之二-----处理SIGCHLD信号先说一下关于信号的基本知识:信号(signal)就是通知某个进程发生了某个事件,有时也称为软件中断。信号通常是异步发生的,也就是说进程预先不知道信号准确发生的时间。信号可以由一个进程发给另一个进程(或自身),也可以由内核发给某个进程。SIGCHILD信号就是由内核在任何一个进程终止时发给它的父进程的一个信号。每个信号都有

2013-11-01 22:29:10 1285

原创 tcp客户/服务器程序例子步步改进之一------大体实现

tcp客户/服务器回射程序之一------大体实现回射服务器的大体的步骤为:1.客户从标准输入读入一行文本,并写给服务器。2.服务器从网络输入读入这行文本,并回射给客户。3.客户从网络输入读入这行回射文本,并显示在标准输出上。下图描述了这个简单的客户/服务器程序,并标出了用于输入输出的函数。下面是实现的代码:客户端程序:#include #includ

2013-11-01 19:52:04 649

原创 static关键字

在介绍static关键字之前,先说一下链接属性和存储类型。1.链接属性       当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或者多个函数库中引用的函数链接在一起,形成可执行程序。然而,如果相同的标志符出现在几个不同的源文件中时,应该怎样处理?标志符的链接属性决定如何处理不同文件中出现的标志符。标志符的作用域和它的链接属性有关,但这两个属性不相同。

2013-11-01 09:41:49 640

原创 基本的tcp套接口编程

基本的tcp套接口编程1.socket函数为了执行网络I/O,一个进程必须做的第一件事情是调用socket函数,指定期望的通信协议类型。#include int socket(int family, int type, int protocol);//返回:非负描述字代表成功,-1代表出错。socket函数的协议族(family)常值family说明

2013-10-27 17:02:15 1616

原创 套接口编程简介

套接口编程简介1.套接口地址结构(1).IPv4套接口地址结构IPv4套接口地址结构通常称为"网际套接口地址结构",以“sockaddr_in”命名,定义在头文件中。struct in_addr { in_addr_t s_addr; //32-bit IPv4 address.network byte ordered};struct sockaddr_in { u

2013-10-27 15:35:07 1041

原创 确定大小端模式(主机字节序)

内存中存储两个字节有两种方法:1).将低字节存储在起始地址,这种称为小端字节序(little-endian)2).将高序字节存储在起始地址,这种称为大端字节序(big-endian)下面的函数实现了这个功能:#include "unp.h"int main(char argc, char ** argv) { union { short s; char c[siz

2013-10-26 22:06:43 652

原创 时间获取的客户和服务器程序

获取时间的客户程序:#include "unp.h"#include "error.c"int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if(argc != 2) { err_quit("usage:a.out"

2013-10-26 14:56:13 849

转载 SQL injection attack

转载自:http://www.veracode.com/security/sql-injection

2013-10-25 10:52:45 769

转载 MYSQL Python 入门教程

MYSQL Python 入门教程参考出处:http://www.cnblogs.com/sherlockhua/archive/2012/03/29/2423786.htmlhttp://blog.csdn.net/kongxx/article/details/70940181.安装MySQLdb模块。先在ubuntu下安装:sudo apt-get install py

2013-10-23 20:56:03 860

原创 python中的邮箱通信

主要的参考资料:http://pymotw.com/2/imaplib/#module-imaplib参考以上资料,写了一个小程序。小程序的主要功能是实现从163邮箱向qq邮箱发送信息,并在qq邮箱中读取邮件的内容。遇到的主要问题是:配置文件的读取;邮件内容的匹配。一下是主要 的代码:'''Created on Oct 22, 2013@author: lsy'''i

2013-10-23 10:05:56 793

原创 python的小程序----用urllib2从百度贴吧获取发言

python的小程序----用urllib2从百度贴吧获取发言本文参考http://www.oschina.net/code/snippet_1156122_21491小程序的目标:输入网址(但是输入的网址有限制,此程序是针对这种形式(http://tieba.baidu.com/p/2164260230?pn=?(?代表1,2,3...))的地址进行处理的)。程序实现思想:根据给

2013-10-20 20:22:52 804

原创 Pyhon Manual读书笔记之引用vs拷贝

引用vs拷贝1.引用        赋值操作总是存储对象的引用,而不是这些对象的拷贝。引用的一大特点:可以在程序范围内任何地方传递大型对象而不必在中途产生拷贝。不过,因为赋值操作会产生相同对象的多个引用,需要意识到在原处修改可变对象时可能会影响到程序中其他地方对相同对象的其他引用。2.拷贝明确要求拷贝的几种方法:(1)没有限制条件的分片表达式(L[:])能够复制序列(2)字

2013-10-15 11:36:49 745

原创 Python Manual读书笔记之第6章动态类型简介

动态类型简介在python中,类型是在运行过程中自动决定的,而不是通过代码声明。这意味着没有必要事先声明变量。1.变量、对象和引用对于   a = 3python将会执行三个不同的步骤去完成这个请求。(1)创建一个对象来代表值3(2)创建一个变量a,如果它没有创建的话。(3)将变量与新的对象3相连接。(引用)以具体的术语来说:(1)变量是一个系统表的元素,拥

2013-10-14 21:08:42 633

原创 Python Manual读书笔记之模块导入与重载

模块导入与重载        模块,每一个以扩展名.py结尾的Python源代码文件都是一个模块。其他的文件可以通过导入一个模块读取这个模块的内容。模块往往是变量名的封装,被认做是命名空间。在一个包中的变量名就是所谓的属性,也就是说,属性就是绑定在特定对象上的变量名。        导入从本质上讲,就是载入另一个文件,并能读取那个文件的内容。导入文件是运行文件的一种方式。导入(im

2013-10-14 20:08:11 672

原创 python manual读书笔记--第2章python如何运行程序

python如何运行程序要弄清楚python如何运行程序这个问题,需要先搞清楚什么是python解释器?源代码?字节码?PVM?python解释器是运行python程序的程序;源代码是为程序所写的语句。它包括文本文件(通常以.py为后缀名)的文本;字节码是python将程序编译后所得到的底层形式。python自动将字节码保存到后缀名为.pyc的文件中;PVM是python虚

2013-10-14 19:26:45 1017

原创 拓扑排序及其应用

拓扑排序及其应用1.拓扑排序的介绍对于一个有向无环图G=(V,E)来说,其拓扑排序是G中所有结点的一种线性次序。该次序满足如下条件:如果图G包含边(u,v),则结点u在拓扑排序中处于结点v的前面(如果图G包含环路,则不可能排出一个线性次序。)可以将图的拓扑排序看作是将图的所有结点在一条水平线上排开,图的所有有向边都从左指向右。2.拓扑排序与深搜的结合。poj1270:http:

2013-10-09 16:58:58 1215

原创 可行遍性问题之欧拉回路

可行遍性问题之欧拉回路(以下参考图论算法理论、实践及应用一书)1.判断是否是欧拉回路无向图G存在欧拉通路的充要条件是:G为联通图,并且G仅有两个奇度节点或者无奇度节点。有向图D存在欧拉通路的充要条件是:D是有向图,D的基图联通,并且所有顶点的出度与入度相等;或者除两个顶点外,其余顶点的出度与入度相等,而这两个顶点中一个顶点的出度与入度之差为1,另一个顶点的出度与入度之差为-

2013-10-07 21:13:43 961

原创 Havel-Hakimi定理及其应用

Havel-Hakimi定理及其应用Havel-Hakimi定理:由非负整数组成的非增序列s:A[0], A[1],.....,A[n](n>=2,A[0]>=1)是可图的,当且仅当序列s1:A[1]-1,A[2]-1, A[A[0]]-1,A[A[0]+1],.....A[n]是可图的。Havel-Hakimi定理实际上给出了一个序列s构图方法:把序列s按照非递增顺序排好序后,从中选出度

2013-10-03 00:02:37 1103

原创 并查集的介绍

并查集1。并查集的基本操作设想需要对不相交集合进行两种操作:(1)检索某元素属于哪个集合;(2)合并两个集合。我们最常用的数据结构是并查集的森林实现。在一个不相交集合森林中,每个成员仅指向它的父结点。每棵树的根包含集合的代表,并且是自己的父结点。三种不相交集合的操作:makeSet:简单的创建一棵只有一个结点的树。findSet:通过沿着指向父结点的指针找到根。这一通向

2013-09-29 21:30:28 572

原创 最近公共祖先问题(LCA)

最近公共祖先问题(LCA)(下面的内容来自算法艺术与信息学竞赛一书)LCA问题:给出一个有根树T,对于任意两个节点u和v,求出 LCA(T, u, v).即离根最远的结点x,使得x同时是u和v的祖先。            把LCA问题看成询问式的:给出一系列询问,程序当对每一个询问尽快做出反应。对于这类问题有两种解决方法:(1)在线算法(online-algorith

2013-09-29 20:46:44 826

原创 并查集的相关题目

这几天一直在刷并查集的题目,对于并查集的较难的题目,等着功力深厚了在做吧。先说一下杭电上面的题目:并查集专题链接http://acm.hdu.edu.cn/problemclass.php?id=721hdu1116:先用并查集判断图是否联通,再看是不是存在欧拉路径。(利用欧拉路径需要满足的顶点度数的要求).要注意题意的转换hdu1142:这题没有用并查集解决。先用dijkst

2013-09-26 18:10:49 1077

原创 poj 1365 Prime Land

题意:输入:a1,b1,a2,b2....。求出x=a1^b1 * a2^b2 * ....。将x-1这个数分解成素数的乘积。并将这些素数按从大到小的顺序输出及其幂。思路:求出所有的素数。求出x,再因式分解。本题比较难的部分是处理输入。参考C++ primer。#include #include #include #include #include #include using

2013-09-05 15:57:11 548

原创 区间图着色问题

这是算法导论贪心算法一章的一个习题:题目描述:假定有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行。我们希望使用最少的教室完成所有的活动。设计一个高效的贪心算法求每个活动应该在哪个教室进行。(这个问题称为区间图着色问题(interval-graph color problem)。我们可以构建一个区间图,顶点表示给定的活动,边连接不兼容的活动。要求用最少的颜色对顶点进行着色

2013-08-25 20:30:45 2417

原创 poj3254 Corn Fields

题目链接:http://poj.org/problem?id=3254题目大意:给定N*M矩形的格子。1表示这个格子可以放牛,0表示不能。但是相邻的格子之间不能放牛。问总共有多少种放牛的策略?(不放牛也算1种)思路:状态压缩DP#include #include #include using namespace std;const int MAXN = 100000000;i

2013-08-23 19:44:03 530

原创 poj1185 炮兵阵地

题目链接:http://poj.org/problem?id=1185题意:汉语#include #include #include #include using namespace std;int map[110];int N, M;int dp[2][65][65];//滚动数组int state[65];int soilder[65];/*状态转移方程:dp[

2013-08-23 17:45:42 631

原创 poj 2653 Pick-up sticks

题目链接:http://poj.org/problem?id=2653题意:给你n根木棍,问在最上面的有哪些?思路:运用叉积判断线段是否相交。在比较的时候,一定要注意顺序。否则有可能TLE。#include #include #include using namespace std;struct Point { double x, y;};const int M

2013-08-22 20:52:46 482

原创 poj 2653 Intersecting Lines

题目链接:http://poj.org/problem?id=1269题目大意:给定两条直线,判断两条直线共线、平行、相交。若相交,求出交点。思路:考察叉积的应用。#include #include #include using namespace std;const int INF = 100010;struct Point { int x, y;};Poi

2013-08-21 21:10:02 496

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除