关闭

[置顶] C++多态(上)——虚函数、虚表

OOP的核心思想是多态性(polymorphism)。其含义是“多种形态”。我们把具有继承关系的多个类型称为多态类型。引用或指针的静态类型和动态类型不同这一事实正是C++语言支持多态性的根本所在。 多态性:当用于面向对象编程的范畴时,多态性的含义是指程序能通过引用或指针的动态类型来获取类型特定行为的能力。 多态性在C++中是通过虚函数来实现的。首先我们先来强调几组概念: 静态多态和动态多态、静...
阅读(363) 评论(1)

[置顶] 智能指针(下)-----boost库智能指针,定制删除器、循环引用

上一篇我们已经详细讲解了智能指针的基础性知识和auto_ptr的模拟实现。 今天呢我们来讲解boost库的发展。 在C++11标准出来之前,C++98标准中都一直只有一个智能指针auto_ptr,我们知道,这是一个失败的设计。它的本质是管理权的转移,这有许多问题。而这时就有一群人开始扩展C++标准库的关于智能指针的部分,他们组成了boost社区,他们负责boost库的开发和维护。其目的是为C++...
阅读(158) 评论(0)

[置顶] C++继承详解三 ----菱形继承、虚继承

今天呢,我们来讲讲菱形继承与虚继承。这两者的讲解是分不开的,要想深入了解菱形继承,你是绕不开虚函数这一点的。它俩有着什么关系呢?值得我们来剖析。 菱形继承也叫钻石继承,它是多继承的一种特殊实例吧,它的基本架构如下图: 在我们的设想中,D所对应的对象模型应该如下图所示: 下面我们来用一段代码验证一下: class A { public: A() { cout...
阅读(230) 评论(0)

[置顶] 智能指针(上)-----动态管理内存问题,auto_ptr的模拟实现

今天我们来详解C++中一个重要的知识点——智能指针。文章主要以下面几点来展开: 智能指针定义及动态内存的管理 智能指针作用 auto_ptr的模拟实现 智能指针定义 智能指针简单理解就是智能的指针,它可以智能/自动化的管理指针所指向的动态内存的释放。 智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制(利用了RAII技术),这样做的目的是为了使得智能指针可以方便的管理一个对象...
阅读(537) 评论(0)

[置顶] 模板2——顺序表的实现(现代写法的进一步解析,更深层次的深浅拷贝)

之前我们讲解了关于模板方面的知识,今天我们用模板来实现顺序表。 这次顺序表的实现和之前没有太大区别,但还是有几点需要我们来重点进行详解。 我们先来看下面这段代码#include #include #includeusing namespace std; templateclass SeqList { pub...
阅读(201) 评论(0)

[置顶] 粘滞位(SBIT)

一.什么是粘滞位? 粘滞位(stickybit),又称黏着位,是Linux文件系统权限的一个特殊权限(有三个:SUID,SGID,SBIT)。最常见的用法是在目录(只能是目录,文件无效)上设置粘滞位,如此一来,只有目录内文件的所有者或者root才可以删除或移动文件。如果不为目录设置粘滞位,任何具有该目录写和执行的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录...
阅读(372) 评论(0)

[置顶] 三子棋的实现

三子棋的实现还是比较简单的,在写代码之前,你先构建一下游戏的架构,这样写的时候思路比较清晰,不容易思想卡克,很容易就完成。再一个,你写的代码并不是孤芳自赏的,而是要拿出来给别人看,别人可以清楚地看懂你的代码,这才是好代码。 我们先来看三子棋的架构如何实现,这就看你的思维逻辑能力了。下面代码很清晰的展现了这一架构: void game()...
阅读(770) 评论(1)

海量数据处理(面试题)

1.给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?! 解题思路:哈希分桶法。 1,将100G文件分到1000个文件中,然后将每个IP地址映射到对应文件(IP地址转换为整数,对文件个数进行取余,然后根据结果放入对应文件,这样保证相同的IP肯定在同一文件中); 2,统计每个文件中出现次数最多的IP,然后比较取最大...
阅读(71) 评论(0)

每日一题——判断二叉树是否平衡,求一棵二叉树的镜像

1,判断一棵二叉树是否平衡 一棵树平衡是指它根节点到叶子节点的最长路径与最短路径只差不超过1。bool IsBanlance(Node* root,int& depth) { if(root == NULL) { depth = 0; return true; } int leftDepth = 0; int rightDep...
阅读(69) 评论(0)

每日一题——求二叉树的高度,销毁二叉树

1,求二叉树的最大高度:int length(Node* root) { if(root == NULL) return 0; int leftLength = length(root->left); int rightLength = length(root->right); return (leftLength>=rightLength?(leftLe...
阅读(59) 评论(0)

每日一题——求二叉树叶子节点个数,第K层节点个数

1,求叶子节点个数int leafnum(Node* root) { if(root == NULL) return 0; if(root->left == NULL && root->right ==NULL) return 1; return leafnum(root->left)+leafnum(root->right); }2,第K层节...
阅读(103) 评论(0)

每日一题——atoi,itoa函数的实现

atoi是将字符串转换为长整形数的一种函数,itoa相反 atoi实现需注意一下点: 1,空格; 2,表示数值的正负号; 3,结束条件:非数字或‘\0’; 4,考虑溢出问题; 5,考虑异常输入问题(+abc …),用全局变量valid标识; #define INT_MAX ((int)0x7FFFFFFF) #define INT_MIN ((int)0x80000000) boo...
阅读(72) 评论(0)

每日一题——memcpy,strcpy,memmove的实现

memcpy与strcpy的区别: 1,用途不同:strcpy主要用来字符串拷贝,memcpy主要是其他类型的拷贝; 2,使用方式不同:strcpy是遇到‘\0’停止,memcpy是根据第三个参数来决定拷贝内容;memmove: 原型:void memmove( void dest, const void* src,size_t count ); 用途:从src的count个字符拷贝到des...
阅读(85) 评论(0)

每日一题——布隆过滤器

布隆过滤器:它实际上是一个很长的二进制向量和一系列随机映射函数。用于检索一个元素是否在一个集合中。它的优点是空间效率和时间效率都远远超过一般算法。缺点是有一定的误识率,和删除困难。 原理:当一个元素加入集合时,通过K个Hash函数将该元素映射成一个位阵列中的K个点,把他们置为1,检索时,只要看看这些点是不是都是1就可以知道它存在不。 如果有一个不为1,则该元素肯定不存在; 如果全是1,则该元素...
阅读(73) 评论(0)

每日一题——位图

定义:位图(bitmap)就是利用每一位来存储某种状态,但是状态又比较少的情况。 缺点: 1,只能用于整形; 2,可读性差; 3,位图存储的元素个数虽然比一般做法多,但是存储的元素大小受限于存储空间的大小。位图存储性质:存储的元素个数等于元素的最大值。比如, 1K 字节内存,能存储 8K 个值大小上限为 8K 的元素。(元素值上限为 8K ,这个局限性很大!)比如,要存储值为 65535 的...
阅读(63) 评论(0)

每日一题——字符串循环右移K位,时间复杂度O(N)

例:abcdefgh,循环右移K=3位,就成:fghabcde思路:从上面的例子可以看出,结果就是将后面的K位与前面的N-K位调换位置即可。将字符串逆置,就使得前后位置发生了变化,但是前后两部分的字符顺序出现了逆置,所以在逆置整个字符串时,首先将两小部分分别逆置,最后在整体逆置。 1, abcdefgh ->abcde , fgh 2, edcba , hgf 3, fghabcde/...
阅读(66) 评论(0)

每日一题——排序(从1-n连续的数进行排序)

有一堆从1到n连续的n个数,要求进行排序,时间复杂度是O(N)思路:从第一个数开始,使得a[i]与a[a[i] - 1]进行交换,直至 i == a[i]-1,即该值已回到了自己的所在位置(0对应1,1对应2,…),然后i++;直至结束。void sort(int a[],int len) { int i = 0; for(;i<len;) { int tmp...
阅读(57) 评论(0)
73条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:11603次
    • 积分:820
    • 等级:
    • 排名:千里之外
    • 原创:71篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条