![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
chentaihan
做一个牛B的程序员
展开
-
学习C (一)
int _tmain(int argc, _TCHAR* argv[]){ char str[20],str2[20]; cout for(int i=0;i { str[i]='a'; //if(i==10) //{ // str[10]='/0';//字符串遇到了/0,就会结束,所以strlen(str)=10 //} } str[19]='/0';//结束字符串,没有这一句就回出现乱码 strcpy(str2,str);//将一个字符串赋给列一个相等容量的字符串是会原创 2011-01-06 23:46:00 · 712 阅读 · 0 评论 -
Effective C++构造函数析构函数Assignment运算符
在看《Effective C++》这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上。所以决定把这本书的内容加上自己的理解写成5篇博客,我觉得不管你是否理解这些条款,都值得你先记下来。下面的索引对应的是书中的章节。 11:如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符12:在cons原创 2012-07-16 13:17:10 · 891 阅读 · 0 评论 -
Effective C++ 类与函数的设计和申明
在看《Effective C++》这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上。所以决定把这本书的内容加上自己的理解写成5篇博客,我觉得不管你是否理解这些条款,都值得你先记下来。下面的索引对应的是书中的章节。18:努力让接口完美且最小化19:区分member functions,non-member functions和friend functions三原创 2012-07-22 11:34:49 · 718 阅读 · 0 评论 -
Effective C++面向对象与继承
1:子类不要覆写父类的非虚函数。2:子类不要覆写从父类继承过来的默认参数3:子类与父类之间的赋值问题1:子类不要覆写父类的非虚函数。为了解释方便,先看一个简单的例子。 class A{ public: A(int d):data(d){ } void print() { cout<<"A print..."<<data<<endl;原创 2012-07-28 11:18:23 · 765 阅读 · 1 评论 -
数据对齐
许多计算机系统对数据类型的合法地址做了一些限制,要求某种数据类型对象的地址必须是某个值K(2,4,8)的倍数,这种堆积限制简化形成了处理器和存储器系统之间接口的硬件设计,总之就是为了方便高效的读取数据,于是就有了数据对齐。struct S1{ char k; double i; char c; };Sizeof(S1)的值为24,而不是1原创 2012-10-03 22:38:29 · 1093 阅读 · 0 评论 -
QT+C++实现连连看
需求简单分析。玩过连连看的都知道,连连看其实就是测试能不能用少于等于3条相连的线,连接两个点(图片)。线的条数为0~3条。先只实现了逻辑,并做了智能测试,程序自己可以演示玩连连看的过程,界面还没有做,准备用QT(不熟),源码下载0条线表示两个点相邻,在坐标轴上看就是X轴相同,Y轴值相差1,或是Y轴相同X轴值相差1。1条线表示两个点同X或是同Y轴,且两点之间没有其他点。2条线表示两个原创 2013-02-04 15:17:10 · 3701 阅读 · 0 评论 -
多线程编程--5种方法实现线程同步
1:用Interlocked系列函数实现线程同步;2:用CRITICAL_SECTION及其系列函数实现线程同步;3:用RTL_SRWLOCK及其系列函数实现线程同步;4:用事件内核对象实现线程同步;5:用信号量内核对象实现线程同步;1:用Interlocked系列函数实现线程同步实例如下://旋转锁#include using namespace std;原创 2013-03-31 15:23:24 · 1471 阅读 · 0 评论 -
XML文件解析器TXml
前几天看了开源的XML文件解析器TinyXml,它是怎么实现解析的没怎么看懂,于是决定自己实现一个,反正最近不忙。先命名为TXml。现在完成了解析和查询功能,全部代码加起来不到1000行,将会继续完善它。源码必共享先简单说一下我的思路:1:读取XML文件信息,并存入一个字符数组中;2:遍历数组,将数组解析成一棵树;3:以路径的方式查询和按属性查询;这个解析器最麻烦的地方就在怎么原创 2013-04-11 16:01:19 · 3005 阅读 · 1 评论 -
程序员的自我修养--读书笔记
1:注意不要反回指向栈内存的指针或引用,因为在函数返回时改内存已经被销毁了2:C/C++没有办法知道指针所指的内存容量大小 当数组作为参数传递时,数组将退化成相同类型的指针 不要指望要指针参数去申请动态内存,因为函数会为产生一个临时变量指向参数的内存,当函数内分配内存时,将内存的地址赋给了临时参数,而没有给实参赋值,所有实参没有发生任何变化,应该修改的是指针所指的内容,而不是修改指针的指向,所原创 2013-05-20 16:39:34 · 1138 阅读 · 0 评论 -
C++多态、继承的简单分析
一直以为自己对多态和继承已经比较了解,当遇到虚继承的时候,发现有点犯晕,想不通了,于是在微博上向几个大神请教,很快得到了他们的回复,高兴之情无以言表。之后自己查了一些资料,结合大神的回复,在这里做一下简单的记录。我的问题如下:为什么虚继承类的sizeof要大些啊,是因为虚继承中,子类有指向父类的指针和指向父类的虚函数表的指针吗,比非虚继承多了这两个指针? @左耳朵耗子@简悦云风原创 2013-05-15 10:54:27 · 1076 阅读 · 2 评论 -
虚方法的调用是怎么实现的(单继承VS多继承)
我们知道通过一个指向之类的父类指针可以调用子类的虚方法,因为子类的方法会覆盖父类同样的方法,通过这个指针可以找到对象实例的地址,通过实例的地址可以找到指向对应方法表的指针,而通过这个方法的名字就可以确定这个方法在方法表中的位置,直接调用就行,在多继承的时候,一个类可能有多个方法表,也就有多个指向这些方法表的指针,一个类有多个父类,怎么通过其中一个父类的指针调用之类的虚方法?原创 2013-07-25 12:05:07 · 1066 阅读 · 0 评论 -
C#转C++的一点分享
从C#转C++有段时间了,一直想分享点什么,但又不太好意思分享,毕竟自己做C++的时间不太长,最近感觉自己已能胜任现有工作,想分享的想法又强了点,前几天看到这样一篇博客《那些年·我们读过的专业书籍》,里面列了很多大家认为很好的书,加上自己在自学C++的工程中也看了不少书,感觉并不是所有的书都值得花时间去看的,毕竟很多人一年下来也看不了2,3本书,不同的技术能力的人,适合看的书都不太一样,在这么多大原创 2013-12-26 11:56:46 · 1124 阅读 · 0 评论 -
15道简单算法题
最近在公司里基本处于打酱油的状态,工作正在交接中。没事又做起了算法题目。好久没怎么写算法题了,感觉手气还不错,经常能一次就写对(编译通过,得到想要的结果,没怎么测试),可能是因为这些题目之前看过或是写过,或许就是自己进步了一点。这15道大部分来自《剑指Offer》,作者的博客之前看过几次,感觉写得很好,但看这本书时却没有那个感觉了,可能是因为看过博客的原因吧,没有了之前的那种惊喜。自己就试着实现里面的一些算法题目,基本上是简单的思考一下,如果没什么思路,就看看作者是怎么想的,大概看一下他的思路或是代码,就开原创 2014-06-12 15:28:17 · 12444 阅读 · 0 评论 -
数组求和算法系列
数组求和算法系列一直想写一个数组求和算法系列博客,但由于自己算法能力有限,完成不了,只能完成其中简单的部分,难的部分希望有园友愿意和我一起完成。在写这篇博客的过程中借用了别人的思路,有的的确是要一定的算法和数据结构基础,特别是对递归的理解,到现在为止我觉得我还没有真正的理解递原创 2011-08-24 17:28:58 · 3371 阅读 · 0 评论 -
C++请不要问我string s=”a”+”b”分配了几次内存
C++请不要问我string s=”a”+”b”分配了几次内存 首先我要告诉你,string s="a"+"b";在C++中连编译都通过不了,错误提示:“+:不能添加两个指针”。你说他分配几次内存。为什么报错呢,原因很简单,”a”是一个字符数组,字符数组没有自己的原创 2011-08-08 18:01:07 · 1071 阅读 · 0 评论 -
C++ 二叉树的基本操作
<br />C++实现二叉树的基本操作<br />包括 添加节点、删除节点、前序遍历、中序遍历、后续遍历、层序遍历、最大值、最小值、二叉树的高度<br /> <br />//Tree.h 头文件<br />#include <stdio.h><br /> <br />class Tree<br />{<br /> private :<br /> //节点元素类型为结构体<br /> struct LinkNode<br /> {<br /> int data;<br /> LinkNode原创 2011-04-02 19:18:00 · 1126 阅读 · 0 评论 -
面试题:单词翻转(代码简洁&效率)
作者:陈太汉 单词翻转问题是个大公司常考的一个面试题,在网上看了不少实现方法,感觉都有瑕疵,在下今天又无聊一次,自己写了两种实现方式一个是简洁版,一个是效率版简洁版当然是简洁明了,思路清晰,很容易看懂,但是效率上有待改进,等改进之后发现发现就不是那么好理解了,所以就有了效率版,个人还是主张简洁版,它看起来实在是舒服,让我很是满意。为什么说简洁版效率有瑕疵呢?就是因为方法InvertWo原创 2011-06-26 12:46:00 · 946 阅读 · 0 评论 -
算法--将数组分成和相等的多个子数组,求子数组的最大个数
作者:陈太汉一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2,4}{6} m=3 所以m的最大值为3算法 原理的思想是将大问题转换成小问题。就{3,2,4,3,6}的操作步骤: 第一步:想将数组递减排序得{6,4,3,3,2},求出数组原创 2011-06-26 12:48:00 · 2972 阅读 · 2 评论 -
C++讨厌的临时变量什么时候产生
作者:陈太汉 是的。我们讨厌产生临时变量,因为它要占用我们的内存,消耗我们的CPU时间,让我们的程序性能降低。但有时候它是必须的。 那讨厌的临时变量什么时候产生呢?产生临时变量的三种情况:一:以By Value的方式传值;二:参数为const的类型。三:类型转原创 2011-07-06 11:50:35 · 1228 阅读 · 0 评论 -
算法--找出数组中出现次数超过一半的数
作者:陈太汉算法--找出数组中出现次数超过一半的数 每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学。 有空要看看高数啊,想当年数学那是相当的......#include using nam原创 2011-07-06 11:55:27 · 1247 阅读 · 2 评论 -
C++用数组和链表分别实现Stack
C++用数组和链表分别实现Stack C++学习有段时间了,感觉还是有很多不足啊,今天自己用数组和链表分别实现Stack,当然STL中的Stack肯定不是这么简单,你不妨看一下,说不定有收获呢,若发现有问题,请指正,毕竟我还是C++新手。 数组版//typename可以表示任何原创 2011-07-11 18:30:17 · 1803 阅读 · 0 评论 -
C++用数组和链表分别实现Queue
昨天写了《C++用数组和链表分别实现Stack》,今天就是《C++用数组和链表分别实现Queue》,废话昨天都说了,今天就是纯代码 template class queue { public: bool empty() const {原创 2011-07-12 16:24:32 · 1056 阅读 · 1 评论 -
经典算法题--求对策字符串的最大长度
题目:输入一个字符串,输出该字符串对称子字符串的最大长度,如输入google,则输出4.方法一:思路很中规中矩,遍历这个字符串,若有发现相邻的两个字符相等,就循环判断与这两个字符相邻的两个字符是否相等, 直到不等,记下字符符合条件的字符个数。最大的个数即为所求。 方法原创 2011-07-22 17:58:11 · 723 阅读 · 0 评论 -
7种方式实现斐波那契数列
7中方式实现斐波那契数列一:递归实现 在学校里学习递归的时候,老师就喜欢举斐波那契这个例子,看!多简洁清晰。其实这个例子是非常不适合作为递归举例的, 原因就是效率太慢,除了最后一个数,每个数都被算了一遍又一遍,时间复杂度差不多是5n^2/3。二:数组实现 空间复杂度和原创 2011-07-15 14:30:50 · 1364 阅读 · 7 评论 -
经典算法题--求对策字符串的最大长度(第二版)
经典算法题--求对策字符串的最大长度(第二版) 方法一:思路很中规中矩,遍历这个字符串,若有发现相邻的两个字符相等,就循环判断与这两个字符相邻的两个字符是否相等, 直到不等,记下字符符合条件的字符个数。最大的个数即为所求。(此方法适合如google这样的字符串)原创 2011-07-26 08:44:02 · 1231 阅读 · 0 评论 -
C++自己实现list
C++自己实现list 前两个博客发表了自己写的stack(栈)和queue(队列),感觉比较简单,今天想试着实现list,结果发现,不是那么容易,感觉自己对STL的底层不是很了解,真要自己实现还真的很难,看STL的源代码,那个晕啊...那代码也写得太难理解了,当然跟我不了解有原创 2011-07-21 19:05:04 · 1002 阅读 · 1 评论 -
三种方式实现--从尾到头输出链表
三种方式实现--从尾到头输出链表 方法一:借用栈倒序输出链表 方法二:先翻转链表,再顺序输出 方法三:递归实现,一个妙,两个字妙啊 方法一:借用栈倒序输出链表 因为栈是先进后出,把链表中的元素存进栈中,链表前面的元素在栈底,后面的原创 2011-08-01 19:35:42 · 5449 阅读 · 0 评论 -
COM是一个更好的C++
昨天看了《COM本质论》的第一章”COM是一个更好的C++”,觉得很有必要做一些笔记,于是整理成这篇文章,我相信你值得拥有。这篇文章主要讲的内容是:一个实现了快速查找功能的类FastString,在一个小小的需求之后,慢慢的演变成一个COM组件的过程。类FastString实现了一个快速查找字符串的功能,快到时间复杂度是O(1),我们先不管作者是怎么实现的,估计是通过空间换时间。由于这个类查找字符串很快,于是作者就把这个类当做一个产品,以源码的方式卖给需要的厂商,厂商用后感觉很好,但有的厂商想要获得原创 2014-06-12 15:29:58 · 869 阅读 · 0 评论