C++ 对象的内存布局—— 虚继承下的虚函数

C++ 对象的内存布局(下)这篇文章的“单一虚拟继承”和“钻石型虚拟继承”时的类内存布局讲得不太清楚,我有一处疑问,我用的是VS2005,因此记录一下。   类继承图如下: 这里:类B被类B1和B2虚拟继承,而B1和B2同时被D继承。 B1的f()、B2的f()覆盖了B的f(); D的f()覆...

2014-08-19 12:43:09

阅读数 866

评论数 0

VC++类继承内存布局

——谈VC++对象模型 (美)简.格雷 程化    译 译者前言 一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书...

2014-08-18 15:45:47

阅读数 612

评论数 0

数据结构之并查集

并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。 使用并查集时,首先会存在一组不相交的动态集...

2014-07-19 16:03:41

阅读数 745

评论数 0

STL源码剖析---红黑树原理详解下

原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584       算法导论书上给出的红黑树的性质如下,跟STL源码剖析书上面的4条性质大同小异。       1、每个结点或是红色的,或是黑色的       2、根节点是黑色...

2014-07-10 16:16:35

阅读数 540

评论数 0

STL源码剖析---红黑树原理详解上

原文地址:http://blog.csdn.net/hackbuteer1/article/details/7740956 一、红黑树概述      红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,A...

2014-07-10 16:14:06

阅读数 548

评论数 0

平衡二叉树(AVL树)

平衡二叉树:是一颗空树;或者具有以下性质的树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。 平衡二叉树的关键在于插入结点时如何保持整棵树的平衡性。 下面是不平衡发生的四种情况: (1)平衡二叉树某一节点的左孩子的左子树上插入一个新的节点,使得该节点不...

2014-07-09 14:27:22

阅读数 709

评论数 0

二叉排序树

二叉排序树(Binary Sort Tree):或者是一颗空树,或者是具有以下性质的树:(1)若它的左子树不空,则左子树上所以结点的值均小于它的根节点的值;(2)若它的右子树不空,则右子树上的所以结点的值均大于它的根节点的值;(3)它的左、右子树也分别是二叉排序树。 二叉排序树的基本操作均可以在...

2014-07-08 23:14:25

阅读数 687

评论数 0

从头到尾彻底理解KMP(2014年7月版)

从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文。 1. 引言     本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得...

2014-07-30 10:29:54

阅读数 1025

评论数 0

数据结构之哈希表

“除留余数法”+“开放定址法(线性探测再散列)”实现的哈希表。

2014-07-20 08:57:55

阅读数 973

评论数 0

直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序

一、直接插入排序 稳定,时间复杂度:最好O(n)、最差O(n^2)、平均O(n^2),空间复杂度O(1) void InsertSort(int L[], int n) { int i, j,key; for (i = 1; i<n; i++) if(L[i] < L[i...

2014-07-06 14:13:07

阅读数 1030

评论数 0

计数排序、基数排序与桶排序

一、计数排序 稳定、 当输入的元素是n 个小区间(0到k)内整数时,它的运行时间是 O(n + k),空间复杂度是O(n)。 const int K = 100; //计数排序:假设输入数据都属于一个小区间内的整数,可用于解决如年龄排序类的问题 //Input:A[0, ..., n-1], 0 ...

2014-07-06 13:25:49

阅读数 827

评论数 0

快排、归并排序(分治)、堆排序

(1)快速排序算法以及应用快速排序中划分的思想求数组中第k小的数,最小的前k个数。(2)归并排序算法以及利用归并排序计算数组的逆序对数。(3)堆排序

2014-07-04 23:42:35

阅读数 1318

评论数 1

利用堆实现堆排序&优先队列

堆排序、利用堆实现最大(小)优先级队列、STL中的heap的使用,利用堆求解top_k类问题。

2014-06-19 21:16:04

阅读数 709

评论数 0

利用堆实现堆排序&优先队列

假设要实现非递减排序,则需要用要大顶堆。此处设计到三个大顶堆的操作:(1)自顶向下调整操作:MaxHeapify(对应堆的SiftDown操作)、(2)利用数组建立大顶堆:BuildMaxHeap、(3)不断交换堆顶元素(堆的最大元素)和堆的末尾元素,实现非递减排序。 优先队列分为最大优先队列和最...

2014-06-19 12:15:39

阅读数 2661

评论数 0

数据结构之(二叉)堆

(二叉)堆是一个数组,是一颗近似完全二叉树,分为大顶堆&小顶堆。表示堆的数组A有两个属性:(1)A.length表示数组元素的个数;(2)A.heap-size表示有多少个堆元素存储在数组A中。更多的关于堆的性质的介绍:算法导论第三版:p85-p89、编程珠玑:p141-p145。 堆的操...

2014-06-19 10:41:19

阅读数 1158

评论数 0

最短路径之Floyd算法

图文并茂。Dijkstra算法求某一个源点到其余各顶点时间复杂度是O(n^2),但如果采用此算法,找从某一源点到某一特定终点的最短路径,复杂度仍为O(n^2)。 求每一对顶点之间的最短路径: (1)每次以一个顶点为源点,重复执行Dijkstra算法n次。总的时间复杂度是O(n^3); (2)弗洛伊...

2014-06-10 00:16:01

阅读数 1694

评论数 0

最短路径之Dijkstra算法

本文简单描述了Dijkstra(迪杰斯特拉)算法,结合一个实例进行了算法流程描述,给出了C语言的算法实现。另外给了两个直接应用Dijkstra算法求解ACM题的链接。

2014-06-09 16:37:48

阅读数 24474

评论数 1

数据结构之最小生成树

最小生成树: 一个连通图的生成树是一个极小连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。这种构造连通网的最小代价生成树称为最小生成树,详见数据结构之图(术语、存储结构、遍历)。 求连通网的最小生成树有两种经典方法:普里姆(Prime)算法和克鲁斯卡尔(Kruskal)算法。 1、...

2014-06-09 15:13:46

阅读数 1851

评论数 0

bitmap与2-bitmap使用总结

bitmap是一种简单的数据结构,但在存储空间压缩方面却使用广泛。 bitmap就是用一个bit位来标记某个元素是否存在:1表示存在,0表示不存在;而2-bitmap就是用两个bit为来标记某个元素出现的次数:00出现0次,01出现1次,10出现2次及其以上,11无意义。 2-bitmap在内存中...

2014-06-05 11:02:28

阅读数 1552

评论数 2

数据结构之图(术语、存储结构、遍历)

无向边:若顶点Vi 到Vj 的边没有方向,则称这条边为无向边,用无序偶对来表示

2014-06-04 14:51:15

阅读数 9603

评论数 2

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