C/C++
文章平均质量分 66
likun_tech
这个作者很懒,什么都没留下…
展开
-
C++类型转换总结
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const属性。static_cast,命名上理解是静态类型转换。如int转换成char。dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多转载 2012-03-15 14:42:23 · 328 阅读 · 0 评论 -
C++ 中int,char,string,CString类型转换
1. c++中string到int的转换1) 在C标准库里面,使用atoi:#include #include std::string text = "152"; int number = std::atoi( text.c_str() ); if (errno == ERANGE) //可能是std::errno { //number可能由于过大或转载 2012-03-17 19:00:17 · 550 阅读 · 0 评论 -
堆和栈的区别
总结:1) about stack, system will allocate memory to the instance of object automatically, and to the heap, you must allocate memory to the instance of object with new or转载 2012-03-17 19:05:41 · 373 阅读 · 0 评论 -
开源网站收集
http://search.csdn.net/CSDN搜索,CSDN还是有非常多的编程资源的,用它的搜索能搜出不少东西。代码类别也比较全面。http://snippets.org/简单实用的代码收集网站,强力推荐。比如你要找个DES加密,要找个数据压缩,找个INI文件操作的C代码等,均能手到擒来。http://www.codase.com/index.html它是一个代转载 2012-04-05 22:42:39 · 511 阅读 · 0 评论 -
二分查找
引用请注明出处:http://blog.csdn.net/int64ago/article/details/7425727 看到这个标题无论你是处于怎样的心理进来看了,我觉得都是值得的。因为这个问题太简单,任何一个开始接触“真正”算法基本都是从二分查找开始的。至于二分查找都不知道是什么的可以先去找别的资料看下,再来看这篇文章。既然很简单,那么我们开始一起写一个吧,要转载 2012-04-05 22:46:09 · 395 阅读 · 0 评论 -
100 bugs in Open Source C/C++ projects
AbstractIntroductionSamples of errors detected in various open-source projectsErrors of array and string handlingUndefined behaviorErrors relating to operation priorities.Forma转载 2012-03-20 14:26:33 · 5828 阅读 · 0 评论 -
linux list.h 实例
#ifndef __LIST_H#define __LIST_H#if defined(WIN32)#define INLINE __inline#else#define INLINE inline#endif/* This file is from Linux Kernel (include/linux/list.h) * and modified by simply rem转载 2012-03-22 21:30:07 · 866 阅读 · 0 评论 -
重载操作符时选择成员还是非成员实现
1、赋值(=),下标([ ]),调用(())和成员访问箭头(->)等操作符必须定义为成员,如果定义为非成员的话,程序在编译的时候,会发生错误。2、和赋值操作符一样,复合赋值操作符通常定义为成员。与赋值操作符不同的是,不一定飞的这样做,如果定义为非成员,编译器不会报告错误。3、改变对象状态或者与给定类型紧密联系的其他一些操作符,入自增,自减和解引用,通常定义为类成员4、对称的操作符,fo原创 2012-05-27 09:22:52 · 1577 阅读 · 0 评论 -
NYOJ-138 找球号2【Hash】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138解题思路:hash的简单入门题。不懂的可以参考这篇文章,很好很强大。http://blog.csdn.net/v_JULY_v/article/details/6256463通过这道题,学到了hash的简单应用。hash的优势就在于能快速的查找海转载 2012-05-10 17:57:03 · 1300 阅读 · 0 评论 -
Linux Log的格式和方法
方法一:#define Log(format,args...) do{\ fprintf(stderr,format,##args)}\ while(0)注意while后面是没有分号的,因为当使用的时候,在语句的后面加上,当宏在展开的时候。。。。?方法二:使用va_list、va_start、va_end。int转载 2012-03-16 20:49:14 · 833 阅读 · 0 评论 -
编译静态库和动态库的Makefile文件
写了一个编译静态库和动态库的Makefile文件,修改Makefile中STATIC的值可以编译静态库或动态库。完整的程序和Makefile文件在这里。 MakefileSTATIC=0LIBPATH=libCFLAGS=-WallLDFLAGS=-I$(LIBPATH) -L$(LIBPATH) -lfuncifeq ($(STATIC), 1)LIB=$转载 2012-03-16 14:06:25 · 442 阅读 · 0 评论 -
typedef 使用大全2(结构体)
续 数组#define S(s) printf("%s/n", #s); s typedef struct _TS1{ int x, y;} TS1, *PTS1, ***PPPTS1; // TS1是结构体的名称,PTS1是结构体指针的名称// 也就是将结构体struct _TS1 命名为TS1,// 将struct _TS1 * 命名为 PTS1// 将转载 2012-03-16 16:55:23 · 397 阅读 · 0 评论 -
SkipList 跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前转载 2012-03-14 19:31:00 · 3520 阅读 · 0 评论 -
C/C++面试题系列之3:输出1-N个数字
题目:用C/C++计算1+2+3+……N条件:1.不使用任何循环语句。(for,while,goto等等)2.不使用任何条件语句。(if,?:等等)3.不使用*/等运算,只使用+-运算 4:更不能写1000个printf或是cout。 一看到这个题,人们会想到递归,但是递归需要结束条件,题目要去不要任何判断条件,所以不行。例一:变相的用1000个p转载 2012-03-15 13:46:51 · 995 阅读 · 0 评论 -
关于typedef的用法(未读)(此文极好)
关于typedef的用法一.基本概念剖析int* (*a[5])(int, char*); //#1 void (*b[10]) (void (*)()); //#2 double(*)() (*pa)[9]; //#31.C语言中函数声明和数组声明。函数声明一般是这样:int fun(int, double);对应函数指针(poi转载 2012-03-16 14:31:02 · 412 阅读 · 0 评论 -
typedef和指向函数的指针(好文,经典)(1读)
在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int); 如果不知道,请看下面的程序,里面有比较详细的说明程序开始: // 定义四个函数int add(int, int);int sub(int, int);int转载 2012-03-16 14:52:03 · 427 阅读 · 0 评论 -
Makefile文件的编写
Makefile的编写开始使用Linux编程时,一个很讨厌的问题就是如何写Makefile文件,由于在Linux下不像在Windows下那么熟悉,有那么多好的软件(也许是对Linux孤陋寡闻了)。虽然象Kylix和Anjuta这样的集成编译环境,但是Kylix太大太慢,用它编写console程序不亚于高射炮打蚊子——大材小用,而Anjuta又太不稳定,况且字体有那么难看。不说了,还是言归正传,转载 2012-03-16 15:07:36 · 514 阅读 · 0 评论 -
用C写有面向对象特点的程序
比如在一个项目中,有大量的数据结构,他们都是双向链表,但又想共用一套对链表的操作算法,这怎么做到呢,C中又没有C++中的继承,不然我可以继承一父(类中只有两个指针,一个向前一个向后),而其算法可以写在你类中的虚函数中,供子类使用。如:class Links{public: Links* back; Links* forword; virtual A转载 2012-03-16 16:46:49 · 376 阅读 · 0 评论 -
typedef使用大全1(数组)
typedef到处都是,但是能够真正懂得typedef使用的不算太多。对于初学者而言,看别人的源码时对到处充斥的typedef往往不知所错,而参考书又很少,所以在此给出一个源码,供大家参考 #include #include /* 避免Visual C的for与标准for的不同 */#define for if (0); else for /* dim(a)转载 2012-03-16 16:54:53 · 383 阅读 · 0 评论 -
用GDB调试程序(一)
http://blog.csdn.net/haoel/article/details/2879(GDB调试系列文章)GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“转载 2012-03-16 15:32:46 · 376 阅读 · 0 评论 -
怎么样生成一个随机数
C库提供的rand函数生成的随机数并不是很完美,但是写一个比较完美的随机数生成函数不是很容易的事情。以下是Park和Miller提供的“最小标准”的可移植的随机数生成器的C元以内版本:#include #define a 16807#define m2147483647#define q (m/a)#define r (m%a) stat原创 2012-05-11 16:08:03 · 773 阅读 · 0 评论 -
memcpy和 memmove有什么区别
如果源和目的的参数有重叠,memmove能够提供保证的行为,而memcpy则不能提供这样的保证行为,因此可以实现得更加有效率。如果对你的程序有疑问,最好使用memmove。实现memmove()好像很容易,只需要额外的检测即可对重叠参数提供有效的保证。void *memove(void *dst,void *src,size_t n){ register char *dp =原创 2012-05-11 21:26:41 · 782 阅读 · 0 评论 -
swap函数的低级错误写法
#includeusing namespace std;void swap(int &a,int &b){ // cout<<"citation"<<endl; int t=a; a=b; b=t;}/*void swap(int *a,int *b){ cout<<a<<"\t"<<b<<endl<<endl; co原创 2012-06-08 19:52:43 · 1216 阅读 · 0 评论 -
Handle的实现
Handle的实现在这里主要是残开淘宝的源代码和c++沉思录在淘宝的代码里面,定义了一个HandleBase类,他是handle的基类,里面主要的操作是:1、定义一个Handle准备控制的对象的指针2、get函数获得这个指针3、operator*解引用和->操作符4、bool函数,指针是否为NULL5、各种关系操作符,在这里定义成非类的成员函数接着是正式的Handle类原创 2012-06-08 14:10:07 · 799 阅读 · 0 评论 -
深度解析前置++i和后置i++的效率
i++(后置)和++i(前置)。二者的语义是有区别的,前者先将其值返回,然后其值增1;后者则是先将值增1,再返回其值。i++; //后置++i; //前置注意这里的前置和后置是说的运算符。二者的语义则是一样的,都是将原值增1。但是对于一个非内建类型,在重载这两个操作符后,单独使用在性能方面是否有差别?来考察它们的实现先看下面这个返回对象的分析:class C{pub转载 2012-06-09 00:19:46 · 757 阅读 · 0 评论 -
简单的数组类 Array
#include#includeusing namespace std;templateclass Array{ public: Array():data(0),sz(0) { } Array(unsigned int size):sz(size),data(new T[size])原创 2012-06-09 14:39:42 · 574 阅读 · 0 评论 -
C++优秀书籍清单
多读一些优秀的书籍,对于开发者稳固编程基础、提高编程技能有很大帮助。但是,大多时候,初学者不知道应该读什么书入门,有一定基础的开发者不知道如何进阶。 本文总结了一个C++优秀书籍清单,希望能够为你带来一定的帮助。这些书大多数都有中文版,并且可以很容易在网上找到。 阶段 1 《Essential C++》 这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C转载 2012-06-10 12:25:27 · 635 阅读 · 0 评论 -
c语言里的宏(翻译) 6
连接在宏展开过程中把两个符号连接在一起的特性往往会很有用。我们管这种特性叫符号粘贴或者符号连接。"##" 就是用于符号连接的预处理操作符。当一个宏展开后, "##" 两边的符号就会被组合成一个,然后该组合后的符号会替换"##"两边的符号以及"##"本身。通常情况下"##"两边的符号都会是标识符,或者一边是标识符,一边是预处理号。粘贴之后,一个更长的标识符就被生成了。这不是唯一有效的情况,把转载 2012-05-22 10:14:58 · 875 阅读 · 0 评论 -
Hash函数
常用的字符串函数有:ELFHash、HfIp 等hash函数他们都是十分有效的hash函数,其中,ELFHash是源于Unix System V的字符串hash函数,HfIp是处理URL熊爱国很好的hash函数,一直是用于天王搜索引擎中。int ELFHash(char *str){ unsigned long hash = 0; while(*str!='\0')原创 2012-06-16 17:45:14 · 1041 阅读 · 0 评论 -
递归做1元钱换零钱
给定足够的 5角,2角,1角,5分,2分,1分这六种零钱,将1元(100)换成零钱,一共有多少种换法?int kind[5] = {50,25,10,5,1};int f(int n,int k){ if(n==0){ //printf("ok\t"); return 1; } if(n原创 2012-08-14 15:48:33 · 2626 阅读 · 0 评论 -
设计只能在堆或者栈上创建的类
看到了CSDN一篇帖子在讨论这个问题,某牛给出了回答,于是加以整理了一下设计只能在堆上分配的类方法:将类的构造函数或者析构函数设置为私有,迫使类对象在栈的构造时编译出错[cpp] view plaincopy#include using namespace std; class OnlyHeap { public转载 2012-06-08 22:17:54 · 600 阅读 · 0 评论 -
类内部存储的东西:太简洁了----小话c++(5)
http://blog.csdn.net/cxsjabcabc/article/details/7623630想知道一个类内部是什么,没有比知道它存储的数据还更直接的了。Q: 为什么一个不包含任何成员变量的类的大小不是0?如下代码:[cpp] view plaincopy#include using namespa转载 2012-06-08 17:42:48 · 1801 阅读 · 0 评论 -
面试时的那点事
面试时的那点事 算来毕业也将近两年了,从刚回写程序开始,面试过的公司是屈指可数,难说算坏算好啊。主席老人家说过要在战斗中壮大自己,看来我历练的还远远不够,不过在有限的斗争中,也总结了些许,与大家共勉之。 说来有些问题太过于tricky,如果过分沉浸在这些奇巧淫技里,反倒害了自己,不如把精力投入到更有效的地方。偏偏还能碰到有些人就喜欢追究这类问题,就像孔乙己一样因为知转载 2012-06-09 00:16:16 · 652 阅读 · 0 评论 -
qsort和bsearch的使用
#include#include#include#include#includeusing namespace std;#define N 15int a[N];int cmp(const void *x,const void *y){ return (*(int*)x)-(*(int*)y);}int char转载 2012-06-02 20:54:11 · 582 阅读 · 0 评论 -
priorit—queue用法
priority_queue 调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue 用法相似的 priority_queue, 以加深对 priority_queue 的理解STL里面的 priority_queue转载 2012-06-02 20:14:27 · 601 阅读 · 0 评论 -
indent工具,将代码格式化成内核代码的格式
Command:indent -kr -i8 test.cindent工具可以把代码格式化成某种风格,以上命令就是把代码格式化成linux内核代码的风格。-kr 选项表示K&R风格-i8 选项表示缩进8个空格的长度如果没有使用-nut选项,则每8个缩进空格会自动用一个Tab代替原创 2012-06-04 09:58:47 · 783 阅读 · 0 评论 -
类需要一个虚析构函数吗?
绝不会用作基类的类是不需要虚析构函数的:任何虚函数只在继承的情况下才有用。假设,你设计了一个A类,并且B是A的继承,你在使用的时候,你可能会将实际指向B类的指针指向基类A的指针,并且调用了delete函数。代码如下:#includeusing namespace std;struct A{ string a; virtual ~A() //~A()原创 2012-05-17 09:22:14 · 705 阅读 · 0 评论 -
c++ string使用详解
http://blog.csdn.net/wallwind/article/details/6932348之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简转载 2012-06-06 12:58:45 · 462 阅读 · 0 评论 -
Lisp的永恒之道
Lisp之魅长久以来,Lisp一直被许多人视为史上最非凡的编程语言。它不仅在50多年前诞生的时候带来了诸多革命性的创新并极大地影响了后来编程语言的发展,即使在一大批现代语言不断涌现的今天,Lisp的诸多特性仍然未被超越。当各式各样的编程语言摆在面前,我们可以从运行效率、学习曲线、社区活跃度、厂商支持等多种不同的角度进行评判和选择,但我特别看中的一点在于语言能否有效地表达编程者的设计思想。学转载 2012-06-06 12:25:28 · 542 阅读 · 0 评论 -
类设计者的核查表
设计一个类的时候需要考虑的问题:1、你的类是否需要一个构造函数2、你的数据成员是否私有化使用函数返回私有数据成员的值,并且函数要使用const,说明私有数据成员不能被修改。3、你的类是否需要一个无参的构造函数能否定义成数组的形式4、是不是每个构造函数初始化所有的数据成员初始化时构造函数的主要任务5、类是否需要析构函数看类是够使用了原创 2012-06-07 18:09:58 · 606 阅读 · 0 评论