
c/c++
zlb_xidian
关于通信、安全和交流
展开
-
curl 库的使用
#include #include #include #include #include #include struct MemoryStruct { char *memory; size_t size;};static void *myrealloc(void *ptr, size_t size);static void *myrealloc(void *ptr原创 2012-01-11 22:58:01 · 4822 阅读 · 0 评论 -
工场模式
从实例重温工厂模式和单件模式 收藏 本文由恋花蝶最初发表于:http://blog.youkuaiyun.com/lanphaday,你可以在保持文章完整和保留本声明的情况下转帖、分发和印刷等。 http://community.youkuaiyun.com/Expert/topic/4892/4892570.xml?temp=.8727381今天一个好朋友发了上面这个贴,并邀我过去看看。就去看了看,当时觉得应该用工厂模式去解决,随便写了几句上去,后来又有冲动想写一下代码,正好重温一下经典的工厂模式,就写了如下转载 2010-08-05 15:06:00 · 489 阅读 · 0 评论 -
递归 全排列 问题
/** *递归算法的设计要点: 1.写出递归表达式,一般是一个n=1的分段函数 2.函数的值的传递,会记录n-1*///题目描述如下://集合X的全排列记为:Perm(X),riPerm(X) 表示在每一个Perm(X)排列前加上前缀ri//得到的排列//全排列记为:Perm(R) 由 (r1)Perm(R1),...,(rn)Perm(Rn)组成#include using namespace std;templatevoid print_lis原创 2010-08-04 16:06:00 · 739 阅读 · 0 评论 -
初始化成员列表
那我们为什么要用初始化成员列表,什么时候用初始化成员列表来初始化成员数据呢?Lippman的《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表: 一,需要初始化的数据成员是对象的情况; 二,需要初始化const修饰的类成员; 三,需要初始化引用成员数据; 现在分别举例说明: 一,需要初始化的数据成员是对象。 --------------------------- #include class point { protected: int m_x,m_y; publi转载 2010-08-02 11:41:00 · 3726 阅读 · 3 评论 -
函数返回对象
<br /> #include <iostream>class B{ public: B() { cout<<"default constructor"<<endl; } ~B() { cout<<"destructed"<<endl; } B(int i):data(i) { cout<<"constructed by parameter " <<data<<endl; } B(const B &b)原创 2010-08-02 14:56:00 · 719 阅读 · 0 评论 -
cpp 类型转换
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。看似问题复杂化了,其实不然。C风格的类型转换在程序语句中难以识别,类型转换是去const,还是int转换成char,或是子类指针转换成父类指针?C括号风格的强制类型转换解决不了这些问题。C++的4种类型转换能够解决这些问题:const_cast,字面上理解就是去const属性。static_cast,命名上理解是静转载 2010-07-30 22:37:00 · 649 阅读 · 0 评论 -
stl string file shell 比较
任何人对本文进行引用都要标明作者是Nicolai M.Josuttis ///////////////////////////////////////////////////////////////////////////////////C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C+转载 2010-07-31 11:19:00 · 504 阅读 · 0 评论 -
cpp 进制转换 测试
<br />2 to 16<br />--------------------------------------<br />0000 - 0, 0001 - 1, 0010 - 2, 0011 - 3<br />0100 - 4, 0101 - 5, 0110 - 6, 0111 - 7<br />1000 - 8, 1001 - 9, 1010 - A, 1011 - B<br />1100 - C, 1101 - D, 1110 - E, 1111 - F<br />此时分组为 4 位二进制数为一组<原创 2010-07-31 10:53:00 · 657 阅读 · 0 评论 -
函数 返回引用
返回非引用 string make_plural(size_t i,const string &word,const string &ending) { return (i==1)?word:word+ending; } 以上函数,当i等于1时,函数返回word形参的副本;当i不等于1时函数返回一个临时的string对象,这个临时对象是由字符串word和ending相加而成的。这两种情况下,return都在调用该函数的地方防复制了返回的stri转载 2010-07-29 22:59:00 · 1024 阅读 · 1 评论 -
Google c++ style guide
<br />Google有很多自己实现的使C++代码更加健壮的技巧、功能,以及有异于别处的C++的使用方式。<br />1. 智能指针(Smart Pointers)<br />如果确实需要使用智能指针的话,scoped_ptr完全可以胜任。在非常特殊的情况下,例如对STL容器中对象,你应该只使用std::tr1::shared_ptr,任何情况下都不要使用auto_ptr。<br />“智能”指针看上去是指针,其实是附加了语义的对象。以scoped_ptr为例,scoped_ptr被销毁时,删除了它所指向转载 2010-07-30 09:51:00 · 621 阅读 · 0 评论 -
c++ 递归问题 研究
可以参考 本博客 排序总结: http://blog.youkuaiyun.com/zlb_xidian/archive/2010/07/23/5756921.aspx/*一个算法调用另外一个算法时,需要 * 1 传入参数信息给被调用算法 * 2 为算法的局部变量分配存储区 * 3 将控制转移到被调用算法的入口 * * 当有多个算法嵌套时,按照栈的原则进行,即先调用后返回 * * 递归只是这多个算法是同一个算法而已 * 以下是一个比较复杂的调用: * 连续压入4个栈函数,释放2个后原创 2010-07-28 20:05:00 · 716 阅读 · 0 评论 -
cpp 抓取网页
Linux 下最简单,三种办法:如果在C程序想抓取网页内容,比如百度转载 2010-06-10 08:33:00 · 837 阅读 · 0 评论 -
cpp 最长重复子串
<br />把一个字符串中的所有后缀以其开始位置编号,按字典顺序排列这些后缀后,把相应编号存放在一个数组中,这个数组就是这个字符串的后缀数组。<br /><br />以字符串 aboreabo为例,把它的所有后缀按字典顺序排列后为:<br /><br />abo<br /><br />aboreabo<br /><br />bo<br /><br />boreabo<br /><br />eabo<br /><br />o<br /><br />oreabo<br /><br转载 2010-06-10 11:39:00 · 805 阅读 · 1 评论 -
vim 实用的经验
:w :w newfileI:在当前行首插入A:在当前行尾插入o:在当前行下面插入一个新行O:在当前行上面插入一个新行 $ 移动行尾 0 移动行首H:移动光标到屏幕上面M:移动光标到屏幕中间L:移动光标到屏幕下面原创 2010-07-06 09:30:00 · 557 阅读 · 0 评论 -
几种常见的 core dump
<br /><br />1。什么是段错误?<br />下面是来自Answers.com的定义:<br />所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等转载 2011-05-03 17:32:00 · 1040 阅读 · 0 评论 -
调试 core dump 文件
<br /><br />Tips:调试coredump时, frame 0, print xxx 可打印变量<br />1. 前言:<br />有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.<br />但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.<br /><br />2. gdb:<br />有一种办法是, 我们用gdb的step, 一步一步寻找.<br />这放在短小的代码中是可行的, 但要让你st转载 2011-05-02 17:25:00 · 831 阅读 · 0 评论 -
gcc 编译过程
<br /><br />GCC编译过程 <br /> <br />gcc的编译流程分为四个步骤,分别为:<br />· 预处理(Pre-Processing)<br />· 编译(Compiling)<br />· 汇编(Assembling)<br />· 链接(Linking)<br />以hello.c为例子,在这四个步骤中可以设置选项分别生成hello.i, hello.s, hello.o以及最终的hello文件:<br />hello.c : 最初的源代码文件;<br />hello.i :转载 2011-04-28 21:19:00 · 441 阅读 · 0 评论 -
__builtin_expect myassert()
这个assert功能比较齐全,原帖地址是http://blog.youkuaiyun.com/sealyao/archive/2011/01/30/6169568.aspx//-------file main.c---------- #include #include "myassert.h" int func(转载 2011-06-11 13:36:00 · 897 阅读 · 0 评论 -
文件包含 头文件 inline 编译
C语言中的函数或变量有且只有一个定义,但它可以有多个extern声明。唯一性 规则也适用于常数定义,结构定义,类型定义,宏定义,只不过它们默认只对本 单元可见;而函数和变量(函数外)的定义默认是全局可见的。Linux0.11的目录: |-boot/ |-fs/ |-include/ |-asm/ |-linux/ |-sys/ |-init/ |-ke转载 2011-05-30 17:33:00 · 2028 阅读 · 0 评论 -
负索引 柔性数组 0长数组 结构体数组 初始化
<br /><br />先看负索引的示例:<br />#include <stdio.h><br />int main(void)<br />{<br />int array[] = {1, 2, 3, 4, 5, 6};<br />int *ip = &array[-1];<br />int sum = 0;<br />int i = 1;<br />for(; i < 7; i++)<br />{<br />sum += ip[i];<br />}<br />printf("%d/n", sum);<b转载 2011-05-26 10:44:00 · 1242 阅读 · 0 评论 -
c 操作符 优先级 口诀记忆
<br />放在这里方便查询<br />-------------------<br /> <br /><br />括号成员第一; //括号运算符[]() 成员运算符. -><br />全体单目第二; //所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&<br />乘除余三,加减四; //这个"余"是指取余运算即%<br />移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等<br />等于(与)不等排第七;转载 2011-03-30 13:54:00 · 525 阅读 · 0 评论 -
switch-case a new way
This design pattern solves the problem of having to implement huge switch - case statements and makes dynamic switch - case not dependent on the number of cases.Download source - 85.3 KbOverview<br />This design pattern solves the problem of having to impl转载 2010-09-14 08:41:00 · 536 阅读 · 0 评论 -
KMP matching
<br />#include <iostream>#include <string>using namespace std ;struct KeyWord{ string strkey ; int *matcher ;} ;void KMP_prefix(KeyWord &kw) ;bool KMP_matcher(string &s, KeyWord &t) ;int main(){ string s = "12ababc5转载 2010-06-10 11:41:00 · 319 阅读 · 0 评论 -
string replace 用法
basic_string::max_size 返回string 能放的最大元素个数。(不同于capacity) size _ type max _ size( ) const; basic_string ::size_type cap, max;cap = s.capacity ( ); max = s.max_size ( ); // max=4294967294.basic_string::rfind 寻找给定的string。返回找到的第一个string 下标值;如果没找到则返回npos。 与find转载 2010-07-29 09:22:00 · 18472 阅读 · 0 评论 -
cpp 的编程风格
1. 总体规则:不要随意缩写;2. 宏、枚举等使用全部大写+下划线;3. 变量(含类、结构体成员变量)、文件、命名空间、存取函数等使用全部小写+下划线,类成员变量以下划线结尾,全局变量以g_开头;4. 参考现有或相近命名约定……1.有必要时在类方法变量上给出注释/***mysimple function**A function to calculate原创 2010-05-30 20:54:00 · 659 阅读 · 0 评论 -
cpp 重载 覆盖 隐藏
重载(Overload):---------------在同一可访问区内被声名的几个具有不同参数列的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制叫重载。重载不关心函数的返回值类型。如 int f(int ) float f(int) 不能构成重载覆盖 (Override)----------------是指派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数 严格一致 ,覆盖函数和被覆盖原创 2010-07-07 22:56:00 · 571 阅读 · 0 评论 -
KMP 算法原理
之所以叫做KMP,是因为这个算法是由Knuth、Morris、Pratt三个提出来的,取了这三个人的名字的头一个字母。这时,或许你突然明白了AVL 树为什么叫AVL,或者Bellman-Ford为什么中间是一杠不是一个点。有时一个东西有七八个人研究过,那怎么命名呢?通常这个东西干脆就不用人名字命名了,免得发生争议,比如“3x+1问题”。扯远了。 个人认为KMP转载 2010-01-08 15:58:00 · 1777 阅读 · 0 评论 -
cpp 的 string 操作
memcpystrcopy所以转换时,必须考虑 c式样的字符串结束符----------------------------------------------------------1.string 对于中文的支持find_first_of()这里面是数组时,不知道是否适合中文2.utf8 和 gb2312 文档的支持 3 2个字符3.必须用宽字符码转载 2010-03-06 11:28:00 · 6201 阅读 · 0 评论 -
cpp 管道 pipe
系统调用中,如果要和系统命令进行多次交互,那么system函数和popen都不能胜任,popen是单向管道.要么从中获取标准出,要么向其写入标准输入.所以用fork子进程和父进程利用pipe来进行双向通讯才能解决. 以修改用户密码为例,当然直接执行echo mypwd|passwd myname --stdin是可以的,但为了说明向被调用的子进程传递输入,我让子进程执行 pas转载 2010-03-06 11:48:00 · 953 阅读 · 0 评论 -
开发 mysql
1.要使KDE中文输入法正常,安装qt3-qtconfig运行qtconfig,interface->over the ...2.开发mysql,需要安装:sudo apt-get install mysql-server mysql-clientsudo apt-get install libmysqlclient15-dev3.编译方法gcc or g++转载 2009-11-11 10:37:00 · 493 阅读 · 0 评论 -
ACE 环境的配置
1.ubuntu下可以用新立得软件管理工具安装 libace-dev libace-doc这两个包或者在控制台上用apt-get install libace-dev libace-doc命令来安装 #include #include #include int main(int argc, char *argv[])转载 2009-11-11 10:29:00 · 608 阅读 · 0 评论 -
linux c++ 学习目标
课程大纲一、Linux操作系统 涉及技术:Ubuntu GNU/Linux、RedHat Linux AS5 课程要求:熟练使用常用的Linux/UNIX命令。 时间:1周二、Linux C++开发环境搭建、开发工具的使用 涉及技术:vi、GCC、GDB、Make、CVS、Subversion、Eclipse CDT原创 2009-10-22 09:05:00 · 2104 阅读 · 1 评论 -
kdevelop 配置
kdevelop-------------build-essentialkonsole//automake//qt3//oxrg-dev//libtool原创 2009-10-21 00:05:00 · 4833 阅读 · 0 评论 -
c++小程序
数组求均值#include using namespace std; double average(double* array,int count);int main(){ double values[]={1.0,2.0,3.0,4.0}; cout<<endl <<"The average is:" <<average(values,(s原创 2009-08-05 21:34:00 · 707 阅读 · 0 评论 -
vc++_win32_aplication
#include #include LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam //原创 2009-07-14 21:06:00 · 474 阅读 · 0 评论 -
const 思考
<br /><br />转载...<br />1、什么是const?<br /> 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)<br />2、为什么引入const?<br /> const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继续它的优点。<br />3、cons有什么主要的作用?<br /> (1)可以定义const常量,具有不可变性。<br /> 例如:<br />转载 2010-07-07 11:17:00 · 421 阅读 · 1 评论 -
c++ 中的多态
* C++多态分为编译时多态和运行时多态.<br />* 编译时多态通过函数或操作符的重载来实现<br />* 运行时多态通过虚函数(包括纯虚函数)来实现<br />* 关键字virtual可用于function declaration或class declaration.<br />* 关键字virtual修饰函数时声明虚函数.<br />* 关键字virtual修饰类时声明虚基类(virtual base class). 虚基类的作用是节省空间, 避免重复和二义性, 和多态没有关系.转载 2010-07-07 22:18:00 · 308 阅读 · 0 评论 -
常用碎程序 查找 替换
#include #include #include using namespace std;/* *找出src中的target,用key替换之 * */string &find_replace(string &src,const string &target,const string &key){ int i=0,pos; while(i { pos = src.find(target,i); if (pos == -1) break; src.replace(pos,target.length(原创 2010-07-29 13:35:00 · 548 阅读 · 0 评论 -
单例模式 研究
单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:第一、控制资源的使用,通过线程同步来控制资源的并发访问;第二、控制实例产生的数量,达到节约资源的目的。第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。比 如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源。软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损 耗,这种效率上的损耗还是非常昂贵的。当然,使用数据库连接原创 2010-07-28 08:31:00 · 452 阅读 · 0 评论 -
01背包问题 原理 算法
/* *背包问题 1.形式化描述 给定: 物品i的重量是wi,价值为vi,背包容量为c; 其中c>0,wi>0,vi>0,iE[1,n],找出一个n元向量X,使得 WX =wj时, m(i,j) = max( m(i+1,j),m(i+1,j-wj)+vj) //可以装时,选出装与不装的最大的 当 jwn; m(n,j) = 0; j0,wi>0,vi>0,iE[1,n],找出一个n元向量X,使得 WX原创 2010-07-26 12:56:00 · 2215 阅读 · 2 评论