![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C和C++
文章平均质量分 87
ShawnLeex
坚持做自己懒得做但是正确的事情,你就能得到别人想得到却得不到的东西。
展开
-
求一个数的二进制中1的个数
#includeint main(){ int num=0; int count=0; scanf("%d",&num);while(num){ count++; num=num&(num-1);}printf("count=%d\n",count);return 0;}&是按位与,就是把一个数写成二进制然后按位与,因为1与1为1,1与0为0,所以可以找出每个1原创 2016-05-24 15:27:08 · 225 阅读 · 0 评论 -
STL-空间配置器剖析
网上有很多对于STL空间配置器源码的剖析,之所以这么多人去剖析空间配置器,我觉得是真的设计的太好,而且剖析空间配置器的架构的设计对于C++学者来说是一个不错的提高能力的项目,所以加入到这个解剖大军中来。 参照了侯捷的《STL源码剖析》,原本直接看源码不懂得东西,突然间豁然开朗。再次写下自己对于STL空间配置器的一点点理解。 要了解空间配置器,有一张图是必看的:原创 2016-07-15 00:07:33 · 6297 阅读 · 0 评论 -
C++虚函数和虚表
一直对于C++的虚函数的概念比较模糊,今天上网查资料然后把虚拟继承这一块给搞懂了,给大家分享。 继承是C++的一大特性,继承是复用的重要手段,。通过继承一个类,继承是类型(一个类)之间的关系建模,共享父类的一些资源,但是有些数据是共享补了的,每个类都有自己要实现的东西,所以本质是不同的。 在这里我就不再赘述继承的概念的东西,相信懂一点C++的程序员都会使用继承,但是在这里强调一下原创 2016-07-01 15:12:39 · 810 阅读 · 0 评论 -
中缀表达式转换为前缀后缀最简单的方法
35,15,+,80,70,-,*,20,/ //后缀表达方式(((35+15)*(80-70))/20) //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16等进制不知所措一样~~!人们习惯的运算方式是中缀表转载 2016-07-12 09:36:33 · 1559 阅读 · 1 评论 -
剑指offer之找出数组中的逆序对
在数组中的俩个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组的逆序对的总数。 看到这个问题时,我先想到的方法是遍历整个数组,扫描到一个数字,逐个比较它后面的数字大小。如果后面的数字比它小,则这两个数字就组成一个逆序对,这种方法的是假复杂度是O(N*N),显然,我们必须找到更加高效的算法。 想想其实可以使用排序来解决这个问题,每原创 2016-06-28 21:28:22 · 706 阅读 · 0 评论 -
找到第N个丑数
什么是丑数呢?丑数就是只包含因子2,3,5的数称作是丑数,在这里这种定义我是比较模糊的,所以上网查找了更加浅显的定义,丑数就是另一个丑数乘以2,3,5以后的结果(1除外,通常认为1是最小的丑数)。 通常,最简单的方法肯定是遍历数组,然后确定每一个数是否是丑数,这种方法是最简单并且直观的。bool IsUgly(int num){ while (num % 2 == 0)原创 2016-06-27 09:47:11 · 8647 阅读 · 0 评论 -
复杂单链表的复制
在这里复杂单链表指的是一个具有_sibling结点指针的单链表,这个指针可以指向单链表中的任意一个结点,这就让复制的工作难以进行,当复制_sibling指针的时候需要从链表的头节点开始经过n步才能找到,所以复杂链表的这种复制方法的时间复杂度是O(N*N)。但是一般情况下O(N*N)的时间复杂度是面试官所不能认同的算法,所以我们需要找到比这种方法快的方法。 复杂链表的结点结构:原创 2016-06-26 21:10:30 · 624 阅读 · 0 评论 -
大数运算之字符串模拟
相信大家被特别大的两个数据做运算折磨过。当两个操作数或者运算结果超过类型的表示范围后会有意想不到的错误,这时候我们的电脑还不如我们高中用过的科学计算器,这是作为一个程序员所不能忍受的。所以我们得找到其他的方式来计算。这就是我们今天要讨论的字符串模拟大数运算。 我们的运算一般使用int类型来算的,那么首先我们先复习一下各种int类型的数据表示范围:unsigned int 0~4294967295原创 2016-05-24 15:28:04 · 3169 阅读 · 1 评论 -
复习二进制位的一些操作
最近在学习数据结构感觉利用二进制位来标记一个数是否存在是特别节省空间的,比如位图和布隆过滤器是效率比较高的。所以感觉有必要复习一下二进制位的一些常用的操作。 通过几个例子来复习一下:(一)写一个函数返回参数二进制中 1 的个数(与运算)int count_one_bits(size_t value){ size_t i = 1; int count = 0; while(1) {原创 2016-05-24 15:28:33 · 258 阅读 · 0 评论 -
类模板的分离编译
一直觉得模板类是特别神奇的东西,它可以构造出不同类型的对象,使代码更加的灵活。这个过程就是类模板的实例化。 我们使用类的模板写一个stack类:#include#include"Seqlist1.h"using namespace std;template class Container = Seqlist>class Stack{public: void Push(const原创 2016-05-24 15:28:22 · 493 阅读 · 0 评论 -
剑指offer面试题--类
剑指offer和网上有很多考察类的面试题,我觉得很具有代表性,在这里做一个总结: 简答题一:我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数? 答:错误的。一个类的成员函数使用const修饰,其意义是隐式的在参数中传一个const this*参数。然而,static修饰的成员函数是没有this指针的,与const是相反的。 简答原创 2016-07-04 22:42:48 · 2702 阅读 · 0 评论