代码改变世界

随笔分类 -  C/C++

深入剖析 redis 主从复制

2014-05-12 21:44 by 捣乱小子, 17301 阅读, 收藏, 编辑
摘要: 主从概述redis 支持 master-slave(主从)模式,redis server 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据。特殊的,一个 从机同样可以设置为一个 redis server 的主机,这样一来 master-slave 的分布看起来就是一个... 阅读全文

C 语言实现 C++ 多态

2013-05-09 17:57 by 捣乱小子, 1976 阅读, 收藏, 编辑
摘要: C 还是 C++?C++ 中的多态是指「通过基类对象的指针或者基类对象的引用调用虚函数」,表现更多派生类的特性,但根据 C++ 多态的实现,我们发现这种方法存在一定的空间和效率的折损。不可否认,多态轻松解决了很多工程中遇到的问题,这与 pure C 的解决方法比起来,更为优雅。在考虑移植性上,C 的光芒要盖过 C++,但 C++ 的多态是可借鉴的,于是用 pure C 来模仿 C++ 中多态行为。C 如何实现多态在 C 中没有类的概念,但有 struct,而且 C 中的 struct 是不允许有函数的,只允许存在变量,那是不是函数变量就允许存在了?!所以,函数指针可以给我们一些提示。假定有一个 阅读全文

C++ 多态实现机制

2013-04-25 16:00 by 捣乱小子, 3562 阅读, 收藏, 编辑
摘要: 本篇从 C++ 初学者遇到的一个有趣的问题开始。有趣的问题考虑下面的 C++ 程序:class A{ void func(){}};class B:public A{ void func(){}};int main(void){ cout func();}输出结果是:class B'sfunc.多态就是多种状态,一个事物可能有多种表现形式,譬如动物,有十二生肖甚至更多的表现形式。当基类里实现了某个虚函数,但派生类没有实现,那么类 B 的实例里的虚函数表中放置的就是 &A::func。此外,派生类也实现了虚函数,那么类 B 实例里的虚函数表中放置的就是 B::func。... 阅读全文

【译】Simple MySQL ORM for C

2013-03-22 12:54 by 捣乱小子, 2185 阅读, 收藏, 编辑
摘要: 原文链接:http://daoluan.net/blog/?p=1613一直不知道有ORM这种东西,直到和 @海坡 交流后才接触。在项目中,需要将数据存储到数据库中,首先想到的是生成各种raw SQL的解决方法。但随着项目的进展,发现它很不灵活。譬如可能因为有新的需求,在数据库student表中添加dept_no字段,那在各种raw SQ中就需要进行修改了,工程浩大。如果操作(插入\修改\删除)数据库表中的数据,和操作数据对象一样,可以简化很多的操作,便于数据层的变更,而不必修改逻辑层代码。//项目随手摘录的一个构造插入指定对象数据的INSERT语句的方法。int gtd_genInsertS 阅读全文

数据结构利器之私房STL(下)

2012-12-08 23:24 by 捣乱小子, 1524 阅读, 收藏, 编辑
摘要: 索引数据结构利器之私房STL(上)数据结构利器之私房STL(中)数据结构利器之私房STL(下)这篇文章http://www.cnblogs.com/daoluanxiaozi/archive/2012/12/02/confidential-stl.html由于严重违反了『博客园首页』的相关规则,因此笔者改将《私房STL》系列的每一篇都整合到博客园中,取消外链的做法。另,考虑篇幅的问题,此系列文章将分为上、中、下。此篇为《数据结构利器之私房STL(下)》,最后一篇。喜欢就顶下:-)此系列的文章适合初学有意剖析STL和欲复习STL的同学们。私房STL之左值和右值私房STL之函数对象私房STL之函数 阅读全文

数据结构利器之私房STL(中)

2012-12-06 23:34 by 捣乱小子, 2791 阅读, 收藏, 编辑
摘要: 索引数据结构利器之私房STL(上)数据结构利器之私房STL(中)数据结构利器之私房STL(下)这篇文章http://www.cnblogs.com/daoluanxiaozi/archive/2012/12/02/confidential-stl.html由于严重违反了『博客园首页』的相关规则,因此笔者改将《私房STL》系列的每一篇都整合到博客园中,取消外链的做法。另,考虑篇幅的问题,此系列文章将分为上、中、下。此篇为《数据结构利器之私房STL(中)》。喜欢就顶下:-)此系列的文章适合初学有意剖析STL和欲复习STL的同学们。私房STL之map和set私房STL之Hashtable私房STL算 阅读全文

数据结构利器之私房STL(上)

2012-12-02 16:13 by 捣乱小子, 2437 阅读, 收藏, 编辑
摘要: 索引数据结构利器之私房STL(上)数据结构利器之私房STL(中)数据结构利器之私房STL(下)这篇文章http://www.cnblogs.com/daoluanxiaozi/archive/2012/12/02/confidential-stl.html由于严重违反了『博客园首页』的相关规则,因此笔者改将《私房STL》系列的每一篇都整合到博客园中,取消外链的做法。另,考虑篇幅的问题,此系列文章将分为上、中、下。此篇为《数据结构利器之私房STL(上)》,中篇和下篇将陆续发布。喜欢就顶下吧:-)此系列的文章适合初学有意剖析STL和欲复习STL的同学们。学过c++的同学相信都有或多或少接触过STL 阅读全文

数据结构利器之私房STL

2012-12-02 00:11 by 捣乱小子, 1888 阅读, 收藏, 编辑
摘要: 此系列的文章适合初学有意剖析STL和欲复习STL的同学们。都是原创!学过c++的同学相信都有或多或少接触过STL。STL不仅仅是c++中很好的编程工具(这个词可能有点歧义,用类库更恰当),还是学习数据结构的好教材。它实现了包括可边长数组,链表,栈,队列,散列,映射等等,这些都是计算机专业同学在数据结构这门核心课程当中需要学习的。在深入一个工具之前,首先要熟练使用它。STL也一样。在剖析STL之前,可以先动手使用STL,比如其中的vector,list,stack等,热热身,而使用比剖析简单的多,何乐而不为呢。网上很多仁人志士都推荐《C++标准程序库》,这本书好!但如果是新手,又急于了解如何使用 阅读全文

C++ 一不小心被delete两次

2012-09-11 12:10 by 捣乱小子, 4540 阅读, 收藏, 编辑
摘要: 2012-09-11 18:04:看到园里朋友们这么热心,有那么一会心里好兴奋。:)2012-09-11 下午:本文曾出现很严重的错误,但不要紧,感谢园友们的即使指正。不喜欢程序语言的C++类中,有时候使用到传值调用(对象实体做参数),遇到这种情况,可要小心了!特别是当你所传值的对象生命周期较长,而... 阅读全文

背包问题(01背包,完全背包,多重背包)

2012-05-06 18:27 by 捣乱小子, 48325 阅读, 收藏, 编辑
摘要: 写在最前面的近日为以下琐事烦身: 差不多要向学院提交项目申请了,本来是想做个多模式的IM系统的,可是跟往届通过审核的项目比起来,缺乏创新和研究价值,所以在文档上要多做手脚,花点心思。 一大堆的作业,每每期中都是这样。 一直想读的DirectUI开源代码一直没有进展下去。 准备五月底的软件设计比赛。魔... 阅读全文

《编程珠玑,字字珠玑》910读书笔记——代码优化

2012-04-15 13:39 by 捣乱小子, 4898 阅读, 收藏, 编辑
摘要: 写在最前面的 再庞大复杂的代码编译器都能接受,编译器会变得越来越聪明,让我们原本的代码更加高效。但是代码执行的多变与不可预测性,如果编译器大肆“优化”,偶尔或者大胆的说“在大多数情况下”,会得到“聪明反被聪明误”的后果,所以编译器非常小心谨慎,一遇到不可预测后果的优化,它就会立即折返,停止这一步的优化工作,因为它不知道程序员的本意是什么,“它怕得罪你”。 程序员要编写容易优化的代码,以帮助编译器扫清障碍。关于代码优化,笔者特别喜欢《深入理解计算机系统》一书中的第五章,有兴趣的可以阅读一下。代码优化小剖代码优化的方法总结了5种。 将函数展开,即内敛函数,以优化函数的调用。 《从简单的算法初探过. 阅读全文

《编程珠玑,字字珠玑》1234读书笔记——多路归并排序

2012-03-29 12:49 by 捣乱小子, 5191 阅读, 收藏, 编辑
摘要: 写在前面的2012年3月25日买下《编程珠玑》,很期待但不知道它能给我带来什么! 编程珠玑,字字珠玑。但是翻译有点拗口,有时候整句话读下来都不知道在讲什么,多少有点掩饰了珠玑的魅力,真怀疑是不是直接有道翻译了。位图数据结构法在“开篇”的里,讲述了排序的一个问题,大意就是,对一个“最多占n位的(就是n位的整数),随机的,无重复的(互异无序)”的整数序列进行排序,那么这个序列的总长度len#include#include#include#includeusingnamespacestd;#defineMAX10000//总数据量,可修改#defineMAX_ONCE2500//内存排序MAX_ON 阅读全文

STL swap潜在的危险

2011-12-18 19:48 by 捣乱小子, 5421 阅读, 收藏, 编辑
摘要: 背景:在学习C++编程的时候,都使用过标准库(STL)当中的swap,但更多的是swap(int,int)或 者等等一些基本的类型,发散一下是否也可以用来置换自定义的一个类型,比如说某一class(定义一个class相当于定义一个type了),先不从效率上来考虑,看看可行性如何。ps:欢迎讨论。正文:在STL中的swap大概是这样的实现:template<typename T>void swap(T& a,T& b){T temp(a);a = b;b = temp;} 在里面很清楚先先调用T类型的拷贝构造函数构造一个临时变量temp,然后利用这个中间变量将a和b进 阅读全文

(堆的应用)Huffman赫夫曼树的建立

2011-12-15 09:36 by 捣乱小子, 5300 阅读, 收藏, 编辑
摘要: 日后的纠正最近才发现自己的代码有问题,也是在后来做另一个有关哈夫曼实验的时候才发现,在代码当中有很多时候是用new来建立一个新的节点,就包括从最小堆中取出权重最小的节点(这个没有错误),根据两个权重最小节点得出新的节点和往最小堆中插入这个新的节点。问题出在后两个,因为在中间那一步就对left和right设置了parent(看了我的代码的就该很清楚了),其实如果这样下去是很繁琐的,因为new来new去,赋值来赋值去,非常容易搞混。我测试了一下,会把一部分孩子(left或者right)的parent指针搞错,所以今天2011-12-17我更新了Huffman哈夫曼代码。另外值得一提的是,网络上我看 阅读全文

C++对析构函数的误解

2011-12-09 11:56 by 捣乱小子, 15065 阅读, 收藏, 编辑
摘要: C++析构前言 析构函数在什么时候会自动被调用,在什么时候需要手动来调用,真不好意思说偶学过C++…今日特此拨乱反正。 C++析构误解正文 对象在构造的时候系统会分配内存资源,对一些数据成员进行初始化或者赋值;一个良好的class需要有资源回收的机制,而这一操作便落在了析构函数的头上,析构函数来负责类内的资源的free。来看一段代码: class myclass{ public: ... 阅读全文

C++虚函数和纯虚函数(2)

2011-12-04 16:16 by 捣乱小子, 3816 阅读, 收藏, 编辑
摘要: 书接上文......本来只想看看书就过了,但是最近在看《设计模式》和《effective C++》这两本书,其中将到很多关于C++中封装,继承和多态的思想,所以不得不做一些笔记。关于虚函数,在多态当中,一定要将基类的析构函数设置为虚函数并将其实现,只有这样,才能够达到按对象构造的逆序来析构对象;否则,析构的时候,只会析构基类的那一部分,那么派生类那一部分就无法成功析构了。class shape{public: shape(){}; virtual void draw() = 0; virtual ~shape(){cout draw(); delete s; s ... 阅读全文

C++虚函数和纯虚函数(1)

2011-12-04 13:16 by 捣乱小子, 13930 阅读, 收藏, 编辑
摘要: §写在前面的学习过C++类的继承与多态的时候,但是很多的童鞋回过头来都忘记之中关于虚函数和纯虚函数的细节,甚至将他们混淆。§虚函数虚函数是动态多态性的基础,其调用的方式是动态联编(又称晚期联编,简单解释为只有在程序运行时才决定调用基类的还是子类的,系统会根据基类指针所指向的对象来决定要调用的函数);... 阅读全文

C++静态数据成员和静态成员函数

2011-12-03 13:35 by 捣乱小子, 965 阅读, 收藏, 编辑
摘要: 在C++面向对象编程过程当中,对象与对象之间的数据不是共享,在设计类的时候,有时候需要一些对象之间共享的数据,除了把所要共享的数据设置为全局数据或者函数之外,还可以利用C++的静态机制。1、静态数据成员class 类名 { …… static 类型说明符 成员名; …… };静态数据成员是所有对象共享的,其所占的内存空间不会因为某个对象的产生而分配,也不会因为对象的销毁而消失。跟类中其他的非静态数据成员一样,被定义为private时,不能被外界访问。但是可以被类内任意访问权限的函数访问。关于静态数据成员的初始化:非静态成员可以在构造函数当中初始化,但是static不能在构造... 阅读全文

基于顺序表哈夫曼树

2011-11-12 10:59 by 捣乱小子, 2407 阅读, 收藏, 编辑
摘要: 基于顺序表创建赫夫曼树说明:赫夫曼树在信息传输上有很多的用途,刚刚学习二叉树,就遇上了赫夫曼,在学习算法的时候学到了不少的的东西。代码实现: 1//哈弗曼节点数据结构2structHuffmanNode//数据结构的设计是本赫夫曼的一大败笔,我居然用了里面的很多东西我居然用了指针。3{4intweight;5chardata;6HuffmanNode*leftChild,*rightChild,*parent;7HuffmanNode():leftChild(NULL),rightChild(NULL),parent(NULL){}8HuffmanNode(intelem,HuffmanNod 阅读全文

sizeof运算符和strlen函数 ZeroMemory函数和memset函数

2011-11-10 22:53 by 捣乱小子, 915 阅读, 收藏, 编辑
摘要: strlen和sizeof在之前一直把两个东西在某种意义上混淆了,对它们的功能不是很熟悉。在逛了下谷歌之后,发现自己误解的东西很多。strlen与sizeof的区别1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。2.sizeof是算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。5.大部分编译程序在编译的时候就把 阅读全文