- 博客(33)
- 收藏
- 关注
转载 成员函数的重载、覆盖与隐藏
转载:http://www.cnblogs.com/qlee/archive/2011/07/04/2097055.html成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派...
2012-10-16 11:20:00
171
转载 蓄水池抽样
题目:要求从N个元素中随机的抽取k个元素,其中N无法确定解法:首先选择N中的前k个数加入“蓄水池”中,然后从第k+1个数开始,以k/k+i(i=1,2,3...)的概率选择这个数,然后在蓄水池中随机选择一个数,并将其替换,N个元素遍历完毕后,蓄水池中的k个数就是随机选择的。证明:这里即需要证明每个数出现在蓄水池中的概率都是相等的,拟采用数学归纳法 1.当i=...
2012-10-11 13:35:00
150
转载 ++i和i++哪个效率更高
转载:http://blog.chinaunix.net/uid-21843387-id-105857.html答案:在内建数据类型的情况下,效率没有区别;在自定义数据类型的情况下,++i效率更高!分析:(自定义数据类型的情况下)++i返回对象的引用;i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。(...
2012-10-11 13:03:00
157
转载 结构体内字节手动对齐(#pragam pack)
在程序运行过程中,结构体或类的字节对齐可以使程序更方便、更快速的执行,除了编译器本身的优化外,还可以在程序中手动对齐。在C/C++中,是通过引入#pragam pack(n)来实现的。 缺省情况下,编译器为每个结构体或类中的每个成员按其自然对界(natural alignment,自然对界是指按结构体或类的成员中size最大的成员对齐)条件分配空间。各个成员安装它们被声明的顺序...
2012-03-19 09:20:00
256
转载 STL常用容器浅谈
STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用。下面,我们就浅谈某些常用的容器。这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)。1、顺序性容器(1)vector vect...
2012-03-06 17:08:00
148
转载 关于海量数据处理的各种常用数据结构浅谈
随着互联网的兴起,越来越多的内容被放到互联网中,从而导致海量数据处理受到更多人的重视,尤其是在百度、腾讯等这些涉及海量数据的公司。下面我们简单谈一下关于海量数据处理的一些常用数据结构。包括哈希、bitmap、Bloom filter、堆、mapreduce、trie树。(1)哈希 对于哈希,相信大家都不会陌生。其基本原理不再说明,哈希的一个关键点是哈希函数的选择,如何使映射...
2012-02-17 15:49:00
414
转载 关于C、C++中可变参数的简介——(va_list,va_start,va_arg,va_end)
由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用C++,如果参数个数不能确定,也很难采用函数重载。对这种情况,提出了指针参数来解决问题。 如printf()函数,其原型为: int printf( const char* format, ...);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,...
2012-01-04 20:49:00
470
转载 函数式宏定义与普通函数
在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数、表达式、格式串等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢?我们以下面两行代码为例,展开描述:...
2011-12-27 17:14:00
435
转载 C/C++中的side effect(负效应) 和sequence point(序列点)
不知你在写code时是否遇到这样的问题?int i = 3; int x = (++i) + (++i) + (++i); 问x值为多少?进行各种理论分析,并在编译器上实践,然而可能发现最终的结果是不正确的,也是不稳定的,不同的编译器可能会产生不同的结果。这让人很头疼。结果到底是啥呢?对于此题的答案,一句话,Theresult is undefined! 详细解释待我慢慢说来。 ...
2011-12-14 21:02:00
194
转载 指针函数 vs 函数指针
函数指针和指针函数是C语言中的一个挺常见的问题,对于新手来说,若不加以区分,还真是个难点。针对此问题,本章专门介绍了二者之间的区别,让读者对函数指针和指针函数有更深入的了解。 函数指针和指针函数都是概念简称,指针函数是指返回值是指针的函数,即本质是一个函数。而函数指针是指向函数的指针变量,即本质是一个指针变量。(1)指针函数 函数指针是指返回值是指针的函数,其本质是一...
2011-12-14 20:04:00
98
转载 康拓展开及应用
题目:给出n个互不相同的字符, 并给定它们的相对大小顺序,这样n个字符的所有排列也会有一个顺序.现在任给一个排列,求出在它后面的第i个排列.这是一个典型的康拓展开应用,首先我们先阐述一下什么是康拓展开。(1)康拓展开 所谓康拓展开是指把一个整数X展开成如下形式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]...
2011-12-12 20:19:00
172
转载 linux命令之grep用法
grep是linux中很常用的一个命令,主要功能就是进行字符串数据的对比,能使用正则表达式搜索文本,并将符合用户需求的字符串打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep在数据中查找出一个字符串时,是以整行为单位来进行数据选取的。(1)命令格式 grep [cinvs] 'pa...
2011-12-12 20:18:00
89
转载 linux之cut用法
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。(1)其语法格式为:cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]使用说明cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数...
2011-12-09 20:28:00
2753
转载 linux之sort用法
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序。参 数:-b忽略每行前面开始出的空格字符。-c检查文件是否已经按照顺序排序。-f排序时,忽略大小写字母。-M将前面3个字母依照月份的缩写进行排序。...
2011-12-08 20:17:00
689
转载 linux之sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法sed命令行格式为:sed [-nefri] ‘command’ 输入文本常用选项:-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被...
2011-12-07 21:16:00
3165
转载 linux之awk用法
awk是一个非常棒的数字处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分为数个“字段”来处理。运行效率高,而且代码简单,对格式化的文本处理能力超强。先来一个例子: 文件a,统计文件a的第一列中是浮点数的行的浮点数的平均值。用awk来实现只需要一句话就可以搞定$cat a1.021 331#.ll 442.53 6ss 7awk 'BEGIN{tot...
2011-12-06 20:32:00
267
转载 彻底搞定C指针---指向指针的指针指向指针的指针(转载)
C及C++语言中,最让人头疼的就是指针问题了,这章主要介绍一下关于指针及指针的指针的概念。区分*p与**p的区别。(1)、指针概念当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址 5 6 78 9 10 11...
2011-12-05 19:49:00
97
转载 C++中cout的运行机制
关于C++中cout的使用,相信大家再熟悉不过了,然而对于cout是如何输出的?输出的机制是啥,需要进一步的了解。本章娓娓道来。前几天在网上看到这么一个题目:View Code #include <iostream>using namespace std;int hello1();int hello2();int main() { int a, b; ...
2011-12-03 20:52:00
184
转载 哈希、一致性哈希
哈希,通过哈希函数将关键字与存储位置建立一个对应关系,这样在查找关键字的过程中就没比较进行一个一个比较,而直接定位关键字所在的位置,是一种以空间换取时间的方式。由于所映射的地址空间有限及哈希函数的设置,就是产生冲突,需要建立处理冲突的方法。在一般情况下,冲突只能尽可能的减少,而不能完全避免。那么什么是一个好的哈希呢?通俗点说,好的哈希也许就是能使关键字地址分布均匀,冲突少。下面我们具...
2011-11-26 11:53:00
98
转载 并查集
转载:http://apps.hi.baidu.com/share/detail/15881874 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。先看一个实例: 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如...
2011-11-23 20:45:00
85
转载 数据结构中的各种树浅谈
数据结构中为了存储和查找的方便,用各种树结构来存储文件,本章就浅谈一下各种树的表示方法、特点及各自的用途,本章设计的树结构包括:二叉查找树(二叉排序树)、平衡二叉树(AVL树)、红黑树、B-树、B+树、字典树(trie树)、后缀树、广义后缀树。1、二叉查找树(二叉排序树) (图a)二叉查找树是一种动态查找表(图a),具有这些性质:...
2011-11-22 16:14:00
397
转载 字符串匹配算法
问题: 两个字符串,A=”abcababbca“,B=”abab“,求问字符串B是否在字符串A中。这里依旧分两种情况讨论,一是字符串B在A中的位置必须是连续的。二是字符串B在A中的位置不是连续的,只要相对位置正确就可以。(1)字符串B在A中的位置是连续的。方法一:KMP匹配算法 KMP匹配算法的原理就是在匹配过程中A的指针一直往前顺次走,而B的指针尽量往前走。我们称B为模...
2011-11-19 16:38:00
110
转载 Define const static用法
1、Define用法: define主要是用于宏常量定义的,使程序看起来更简洁明了,方便代码维护,#define定义的实质只是一个常数的名字,没有具体数据类型的,没有分配内存空间。在编译是会被编译器替换为该常数。每次使用该宏定义,就要进行编译并分配空间,若一个程序中多次使用define定义的数据,则就会有多份拷贝。这么做是为了提高程序的可读性,但安全性相对差点。2、const用...
2011-11-16 17:22:00
129
转载 最长公共序列
关于最长公共子序列,相信大家都不是很陌生了,在这里我们分两种情况讨论,一是子序列是不连续的,二是子序列是连续的。题目:字符串A=“abcbdab”,字符串B=“bdcabc”,求A与B的最长公共子序列(1)子序列是不连续的 关于子序列是不连续的,最长用的方法是动态规划,通式为: x[i][j]=x[i-1][j-1] if A[i]==B[...
2011-11-14 11:55:00
75
转载 海量数据处理(转载)
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为...
2011-11-12 20:19:00
69
转载 字典树(trie树)、后缀树
(1)字典树(Trie树) Trie是个简单但实用的数据结构,通常用于实现字典查询。我们做即时响应用户输入的AJAX搜索框时,就是Trie开始。本质上,Trie是一颗存储多个字符串的树。相邻节点间的边代表一个字符,这样树的每条分支代表一则子串,而树的叶节点则代表完整的字符串。和普通树不同的地方是,相同的字符串前缀共享同一条分支。还是例子最清楚。给出一组单词,inn, int, at...
2011-11-11 08:58:00
167
转载 关于大小端、位域的一些概念
大小端: 对于像C++中的char这样的数据类型,它本身就是占用一个字节的大小,不会产生什么问题。但是当数制类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这4个字节在寄存器中的存放顺序的问题。比如int maxHeight = 0x12345678,&maxHeight = 0x0042ffc4。具体的该怎么存放呢?这个时候就需要理...
2011-11-10 19:33:00
128
转载 (转)sizeof(结构体)和内存对齐
有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看:struct T { char ch; int i;};使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节。实践出真知,在VC6中测试了下,答案确实8个字节。哎,反正受伤的总是我,我已经有...
2011-11-08 20:11:00
61
转载 C++ 内存管理之五(数组 vs 指针)
C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。但二者有着本质的区别:数组:要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下面...
2011-11-07 17:21:00
85
转载 C++ 内存管理之四(new/delete vs malloc/free)
new/deletevs malloc/free malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器...
2011-11-07 16:24:00
57
转载 C++ 内存管理之三(栈和堆)
程序变量分区中栈和堆的区别(1)申请方式stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间。heap: 需要程序员自己申请,并指明大小,在C中malloc函数,C++中是new运算符。如p1 = (char *)malloc(10); p1 = new char[10];如p2 = (char *)malloc(10); p2 =...
2011-11-07 16:17:00
58
转载 C++ 内存管理之二(内存分配)
1、C++编译的程序占用的内存分类(1)栈区(stack):程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。(2)堆区(heap):在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。(3)全局静态区(static...
2011-11-07 15:55:00
72
转载 C++ 内存管理之一(变量)
本章主要介绍几个概念(1)变量和常量变量的基本类型:bool、char、int、short、long、float、double,注意个变量的所占的字节数。常量分类:宏常量、const常量、字符串常量,注意宏常量和cons常量之间的区别。#define MAX 100 //宏常量 const int MAX = 100; // C+...
2011-11-06 22:21:00
97
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人