自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (5)
  • 收藏
  • 关注

原创 python操作数据库相关的代码

工作中难免会遇到数据库数据库相关的操作,利用python脚本提供的数据库操作非常方便:import sysimport MySQLdbimport datetimeimport timereload(sys)sys.setdefaultencoding('utf-8')con = MySQLdb.connect(host =, port=, user

2017-04-21 21:16:32 374

原创 C++中编译器必须为未申明constructor的class合成一个default constructor的几种情况

1.带有Default Constructor的Member Class Object: 合成出来的default constructor主要是为了能够调用 Member Class Object的default Constructor2.带有Default Constructor的Base Class: 合成出来的default Constructor主要是为了能够调用Base Cl

2016-06-23 11:22:15 768

原创 子类、父类之间实现函数重载

大家都知道C++中函数重载只能在同一个类中,因为子类中的函数会遮掩住父类中的同名函数。但是使用using 申明式可以使得父类中的同名函数在子类中可见,从而实现函数重载。实现代码如下所示:#include using namespace std;class Base{public:void fun(int data){cout}};class De

2016-06-18 10:49:39 3260

原创 不同子类拥有基类的不同的静态成员变量的方法

大家都知道所有子类对象(不管是相同的子类或是不同的子类)拥有基类的相同静态成员变量。因为静态变量是属于类的,而不是属于某个对象的。所以如下代码:#include using namespace std;class Base{public:static int data;};int Base::data = 0;class Derivd:pub

2016-06-16 15:10:46 1712

原创 C++常见容器的迭代器类型

random accessIterator:vector,dequeue  string。可以在常量时间内向前或者向后跳跃任意距离。Bidirectional Iterator:set,multiset,map,multimap。可以向前移动,也可以向后移动。

2016-06-14 15:41:52 487

原创 template中 class和typename的区别

1.申明template参数时,前缀关键字class和typename没有区别。2.请使用关键字typename标志嵌套从属类型名称; 但不得在base class lists或者成员初始列内以它作为base class修饰符。

2016-06-10 16:42:45 491

原创 std::tr1::function, std::tr1::bind的使用

相比于函数指针,std::tr1::function 能够兼容此签名函数式类似的可调用物,包括:普通函数、函数对象、成员函数。实例代码如下:#include #include using namespace std;class Object{public:std::tr1::function fun_ptr;};class Object2

2016-06-02 11:44:00 471

转载 求出字符串中第一个只出现一次的字符,要求时间复杂度小于O(2n)

原文链接:http://blog.csdn.net/zzran/article/details/8508175思路:借助两个数组,第一个数组保存每个字符出现的次数,第二个数组保存源字符串中每个字符出现的顺序(数组下标为顺序,数组值为源字符串中的字符),遍历第二个数组并对比对一个数组中该字符出现的次数,如果为1次,则代表已经找到第一个只出现一次的字符。

2015-09-18 21:39:44 654

原创 输出给定字符串的组合情况

// 求给定字符串的组合情况(注意是组合,不是排列)// 思路:可以考虑组合字符串中只有1个字符、只有2个字符、只有3个字符、、、、、、只有n-1个字符//       定义组合字符串中有m个字符(n>m>=0 0代表1个字符) 则这m个字符中的第一个可以从原字符数组中//       的第0个开始取,则后面的m-1个字符则必须从0+1个开始取,直到取到的字符长度等于m为止//  

2015-09-08 15:44:09 648

原创 给定字符串的所有排列

对于这类问题之前想到的解决方案都是 借助标志数组和递归的方式找出所有排列情况:代码如下:#include#include// 定义数组长度#define LEN 20//原数据数组char data[LEN];//组合得到的目标数据数组char desData[LEN];//标志数组用于记录哪些字符已经使用,避免重复使用同一字符uns

2015-09-08 11:10:01 570 1

原创 递归方式输出n位格雷码

#include#include#includeusing namespace std;/// 第一次遇到递归输出格雷码这道题的时候,就知道格雷码的编码上肯定是存在某种规律的,但是我找到的各种规律却///很难用代码描述出来。后来在网上找了很多资料,发现格雷码原来有这样一种规律:/// n位格雷码其实是在n-1位格雷码的基础上添加0、1得到的,添加规律为 n-1位格雷

2015-09-07 14:27:56 1595

原创 Vector 的拷贝构造函数

大家都知道拷贝构造函数调用的常见情形包括1.函数参数传递,函数实参到形参的过程中调用拷贝构造2.函数返回,函数返回一个对象时会调用拷贝构造函数3.对象定义时赋值 如 A a=b 这里b也是类A的一个对象vector中保存了很多对象的拷贝,当vector调用拷贝构造函数时,容器里面的对象都会被拷贝一份到新的容器里,如果容器中对象数目比较多,则这样的开销是十分昂贵的。但是看到一

2015-09-07 12:50:18 8192

原创 MySql常见的存储引擎

·1.MyISAM:  特点:选择密集型:在筛选大量数据时非常迅速。     插入密集型:并发特性允许同时选择和插入数据。             不支持事物,意味着有事物需求处理的表不能选择该存储引擎。2.InoDB:特点:更新密集型:特别适合处理多重并发的更新请求。    支持事物:是标准的mysql支持事务的存储引擎。    自动灾难恢复:能够自动从灾难中恢复。

2015-09-06 17:53:38 455

转载 linux fork函数

linux中 fork函数常常成为笔试面试的考点,发现一篇介绍这方面介绍的非常详细的博文,先给出链接,跟大家一起分享。链接: http://www.cnblogs.com/bastard/archive/2012/08/31/2664896.html

2015-09-06 10:57:39 568

原创 聚簇索引与非聚簇索引的区别

聚簇索引:对磁盘上的数据重新组织,以按照指定的一列或者多列排序。 聚簇索引确定表中数据的物理排序。候选列:主键列,该列在where子句中使用并且插入是随机的。按范围取值的列,如 id>100 and id在group by 、 order by中使用的列不经常修改的列在连接操作中使用的列非聚簇索引:索引顺序与数据物理排列顺序无关。用在以下情况:1. 某列常用于集

2015-09-06 09:04:27 793 1

原创 旋转链表,递归实现

思路:将原链表看成两部分,一个部分表示完成旋转的;一个部分表示未完成旋转的。分别通过两个指针desHead和resHead指向两个链表,在一次函数递归中需要完成的是将未完旋转链表的头指针 P 中的next指针指向已完成旋转队列的头结点Q.并将P添加到已完成队列,从未完成队列中移除P,该表Q当前的指向,使得Q指向新加入的结点P。一下是代码实现。 #includestruct

2015-09-02 16:29:42 646 1

原创 编程注意事项

1.在实际的编程中处于效率考虑,应该尽量用移位运算代替乘除法运算。2.负数右移时,为了不改变移位之后的符号,最高位补13.一个整数(不管正数或者负数)与该整数减1的结果相与得到的结果相当于把该整数最右边的1变为0,很多二进制问题都可以用这个思路解决。4.清晰的书写,清晰的布局,合理的命名决定了代码的规范性。5.在计算机中判断两个小数是否相等时,我们不能直接用==来判断,因为在计算机

2015-09-02 11:44:52 504

转载 C++ 中4中类型转换关键字及其特点

今天看到一篇介绍四种类型转换介绍的非常详细的博文,先给出链接:  http://blog.sina.com.cn/s/blog_4b20940201013ryp.html特别要提一下的是dynamic_cast和static_cast的区别,在向上造型(即派生类向基础类转换的过程)中两者区别不大;向下造型时,dynamic_cast添加了检测当前操作是否有效,实现了安全的向下造型,

2015-08-31 11:55:19 526

原创 unix select函数读写队列注意事项

腾讯面试时曾被问道:如何判断一个套接字的读写状态。当时真的是懵了,感觉网络编程已经习惯了API的调用,不出意外,API都能正常工作,真心没有留意这些API的深层次的内容。后来想想,面试官当时估计是想听到我说用select函数的读写集合区判断套接字的读写状态吧。下面总结一下套接字在哪些情况下可读、哪些情况下可写。可读:1.当套接字接收缓冲区的字节大小大于套接字低水位的标记的当前大小(TCP、

2015-08-18 20:34:20 737

原创 unix网络编程几种模型比较

1.阻塞式IO:套接字默认是阻塞式的,该模型会一直阻塞在系统调用上,直到数据到达内核区并且完成从内核区到用户进程区的数据拷贝。2.非阻塞式IO:该模型将套接字的状态设置为非阻塞,会一直轮询套接字的状态,直到数据到达内核区并且完成内核区到用户区的数据拷贝,个人感觉类似于linux下的自旋锁。3.IO复用:该模型通常阻塞在select/poll系统调用,当内核区数据到达时,select系统调用

2015-08-18 09:43:54 944

原创 TCP三次握手注意事项

刚接触网络编程时,感觉网络连接的建立、网络数据的收发、网络连接的断开这些操作仅仅是调用几个socket AIP就可以搞定的事情,跟网络中讲述的TCP三次握手等内容完全扯不上关系;近期看的一本名为Unix网络编程卷一的书籍,看到书中相关的讲解和介绍之后才恍然大悟:

2015-08-18 09:20:46 609

转载 Vim编辑器相关设置

今天看到一篇很不错的博文详细介绍了Vim编辑器的相关设置,给出链接,以便以后查看:http://blog.sina.com.cn/s/blog_645e2f0b01013e31.html

2015-08-13 15:03:13 471

原创 C++中构造函数初始化列表为什么会比构造函数中赋值要高效

Test{Test(test& t1){this->t=t1;}private:test t;}相信很多人跟我一样,非常困惑为什么Test构造时会先调用test的构造函数,再调用test类的赋值操作符。那是因为赋值操作符不能产生新的对象,Test构造时免不了要构造一个test对象。所以正常流程是 先构造t,然后再调用赋值操作符赋值t(this->t=t1)。

2015-07-03 22:12:10 1866 1

转载 reactor模式和proactor模式

今天看到了几篇将的相当不错的博文,先注明出处:1.http://daimojingdeyu.iteye.com/blog/8286962.http://blog.csdn.net/caiwenfeng_for_23/article/details/84582993.http://blog.csdn.net/historyasamirror/article/details/5778378

2015-07-02 10:45:00 474

原创 windows下动态链接库的创建和使用

动态链接库:顾名思义,程序运行时动态加载的库。将程序中的某些模块用动态链接库的方式发布,可以有效的减少可执行文件(.exe)的容量,实现模块与程序的分离。使用动态链接库时最重要的是 .h头文件 .lib引入库文件 .dll文件:.h文件包括类或者变量的申明,.lib文件包括包括该dll导出的变量或者函数的符号名,dll文件包含该DLL实际的函数和数据。在使用动态库的情况下,在编译连接和执行文件

2015-06-27 10:40:41 829

原创 C++中赋值操作符为什么要返回引用类型

class Test{    Test& operator= (const Test& t)           {          }}这个是我们熟悉的赋值操作符函数的格式,但是该函数为什么非得要返回一个引用呢。查阅了很多资料感觉这种解释比较靠谱:Test a,b,c;a=b=c这里存在连续赋值,这是符合C++的语法规范的。如果赋值操作符返回一个引用类型

2015-06-18 10:42:37 3522 3

原创 boost内存管理机制

boost主要是通过六种智能指针来管理内存的:scoped_ptr scoped_array shared_ptr shared_array weak_ptr intrusive_ptr。他们都是轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。

2015-06-14 11:00:25 589

原创 变量的申明与定义

今天突然想到一个问题:在头文件(.h)文件中定义的变量 int a=13 为什么在其他的地方不能使用extern申明之后直接使用呢,这样不就可以避免include“.h”这种笨拙的方式了吗。网上查找了很多资料,都是众说纷纭。但是从这些博客中可以得出这么一个结论:在头文件中只能申明变量,而无法定义变量。变量的定义需要在源文件(.cpp)中进行。变量的申明和定义最大的区别在于是否存在内存的分配。但

2015-06-11 16:33:06 749

原创 字符串中最长的回文子串问题

此题参考Manache算法,网上很多网友都说需要在转换后的字符串(即是在字符串中添加了‘#’)的最前面加上一个额外的字符,但是我觉得没有必要这么做: 最初的时候我选择第二个字符作为mid 然后寻找后面是否有更适合做mid的字符,如果有则替换。具体代码实现如下:#include #include #define  MIN(a,b) ((a)>(b)?(b):(a))v

2015-04-21 16:33:45 528

原创 C++虚继承与普通继承的区别

虚继承的时候在子类的对象中会多出一个叫虚类指针的大小,有的资料说这个指针指向的内存里面包含了该子类的偏移量和到基类的距离。但是我跟踪过这段内存,发现里面的数据没有规律,也找不到更多的支撑材料,权且先知道子类的对象里面会有这么一个东西吧。先总结虚拟继承中比较特殊的地方,希望能够对大家有所帮助:虚继承时子类的虚函数不再是添加到父类部分的虚表中,而在普通的继承中确实直接添加到父类的虚表中,这就意

2015-04-16 15:54:17 3974

原创 找出一个个既有正数又有负数的数组中子数组的和的最大值

//思路:设前面k项之和为sum(最开始时k为0),将k+1开始的项逐项加到sum中,注意在这个过程中如果出现了负数则需要对当前的sum值保存一次了,因为负数会拖后腿的;如果sum的值已经小于0,则可以认为前面的项之和在拖后面的子数组的后腿,在这种情况下可以撇开前面的子数组 将sum值赋值为0,重新寻找子数组。#includeint MaxSum;void FindMax(in

2015-04-15 09:49:13 2377

原创 找n个数字中第k小的元素

利用快速排序的方法寻找第k小的数据,该方法的时间复杂度平均为O(n),可以满足一般情况下的查找算法#include // res代表开始查找的元素的地址,n代表查找的范围,nTh代表查找该范围内的第nTh小的元素int FindNth(int*res,int n,int nTh)            {//如果查找的范围为1,直接返回该元素 if (n

2015-04-14 20:33:19 1603

原创 C++中成员变量 父类 子类构造析构顺序

c++中对象都是先构造成员变量,再调用自身的构造函数;故父类成员变量首先被构造,然后调用父类的构造函数,再构造子类的成员变量,最后调用子类的构造函数。对象析构时与构造顺序相反,子类先调用自身的析构函数,再调用子类成员变量的析构函数,再调用父类的析构函数,再析构父类的成员变量。测试代码如下:#include using namespace std;class Test

2015-03-25 18:46:49 7335 1

原创 常见排序算法的时间复杂度、稳定性总结

常见排序算法包括:插入排序,希尔排序,冒泡排序,选择排序,快速排序,堆排序,归并排序,基数排序            名称                                       时间复杂度(按照最好、最坏、平均排列)                                                         空间复杂度

2015-03-25 11:58:37 663

原创 二叉树的构造

//本文档主要实现通过正确的括号表示法表示的二叉树字符串创建二叉树#includeusing namespace std;#define LEN  1000//定义二叉树节点的数据结构struct BTNode{ char data; BTNode*left; BTNode*right;};//创建二叉树void CreateBTNode(B

2015-03-24 14:58:40 561

原创 C++虚函数实现机制

今天看到一篇介绍C++虚函数实现机制写得非常好的一篇博文,下面给出链接:http://blog.sina.com.cn/s/blog_54f82cc201013qii.html

2015-03-22 19:37:52 667

原创 GCC编译器编译过程

GCC编译器编译过程主要包括:预编译,编译和优化,汇编,链接。预编译:将程序中引用到的头文件包含进源代码中,并进行相应宏的替换。编译和优化、汇编:编译过程通常是将用户代码翻译成处理器可以识别的操作码,通常是汇编。链接:将用户用到的其他库文件链接到程序中来,并且生成可执行文件。

2015-03-15 17:41:24 442

原创 快速排序

快速排序思路:确定数组最后一个元素为标杆,从数组的元素与标杆做比较,如果不大于标杆则跳过,继续比较下一个元素,找到比标杆大的元素则停止比较,并将这个元素放到数组末端未与标杆做比较的元素的位置上。(第一次的时候就是数组最后一个元素);  同理,从末端未比较的元素里面找出小于标杆的元素,将这个元素放到数组前面刚刚比较过的那个元素的位置上;   循环以上步骤,直到遍历完数组,将标杆放到相遇点上; 再以标

2015-03-13 11:09:14 525 1

原创 希尔排序

希尔排序思路:希尔排序就是插入排序的一种,希尔排序首先确定分组大小,组内采用直接插入排序;然后再减少分组,直到组数为1时全部元素都排好了顺序。代码实现:#include void ShellSort(int*ptr,int n);void PrintList(int*ptr,int n);int main(){ int n,data[1000],i; whi

2015-03-12 18:12:55 390

原创 斐波拉契数列循环方式实现, 数学公式实现。

定义变量a存储f(n)的值,变量b存储f(n-1)的值 按照循环的方式求得最终的值,保存在变量a里面。#includeint a,b;void CalFBList(int n);int main(){ int n; while(scanf("%d",&n)!=EOF) { CalFBList(n); printf("%d\n",a); }

2015-03-12 17:33:10 1758 1

boost asio服务器

大家都知道boost asio是一个proactor模式。proactor负责跟操作系统内核打交道,将用户的提交请求交给操作系统,由内核线程完成各项工作;将内核的完成通知,通过回调函数通知用户现场。 整个过程异步实现,有效的减少了各类阻塞,提高了并发量。

2015-07-04

串口通信解决数据乱码和数据丢失

本程序主要解决了串口接收数据的过程中出现乱码和数据丢失的情况,特别适合于串口通信的初学者.希望能够对大家有所帮助

2015-06-04

斐波拉契数列分治法实现

斐波拉契数列用分治法实现算法,整体效率比用递归方式实现要快出很多。我已经亲手测试过了,希望上传的资源可以帮到大家。如果有任何问题要记得给我留言,大家一起探讨,共同进步啊。

2015-03-10

哈夫曼算法解压文件

哈夫曼算法对解压文件,还原文件的真实面目,还原率达到99%以上

2014-10-28

哈弗曼算法压缩文件

哈弗曼算法实现文件的压缩与解压算法,站在字节的高度对文件实现操作,文件压缩无损伤。

2014-10-28

空空如也

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

TA关注的人

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