`
kmplayer
  • 浏览: 498302 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
1,选择map容器,是为了更快的从关键字查找到相关的对象。 与使用list这样的线性表容器相比,一可以简化查找的算法,二可以使任意的关键字做索引,并与目标对象配对,优化查找算法。 在C++的STL中map是使用树来做查找算法,这种算法差不多相当与list线性容器的折半查找的效率一样,都是 O(log2N),而list就没有map这样易定制和操作了。 2,相比map,hash_map使用hash表来排列配对,hash表是使用关键字来计算表位置。当这个表的大小合适,并且计算算法合适的情况下,hash表的算法复杂度为O(1)的,但是这是理想的情况下的,如果hash表的关键字计算与表位置存在冲突,那 ...
1, 实例代码: #include <iostream> using namespace std; class Top { protected: int x; public: Top(int n) { x = n; } virtual ~Top() {} }; class Left : virtual public Top { protected: int y; public: Left(int m, int n) : Top(m) { ...
1,没有虚基类的情况: #include <iostream> #include <cstdio> using namespace std; class A { public: A() { cout << "A" << endl; }; }; class B : public A { public: B() { cout << "B" << endl; }; ...
1,首先简要说明下为什么empty class的大小不是0? 这是因为c++标准有个规定,操作符new object必须返回一个唯一的指针指向一个对象,如果empty大小为0,无疑底层的操作将是malloc(0)等等之类,则返回NULL或出错,因此设定其为1。 实际应用中,如果一个empty作为一个子类的基类或虚基类,编译器都会作一些特殊处理,去掉这个额外的1。 #include<iostream> using namespace std; class A { }; class B : public A { public: int v; }; ...
兴趣所致,搜了一些关于JVM的简单介绍,算是扫盲吧。 1.JVM实现机制 Java虚拟机就是一个小的计算机,有自己的指令集,有自己的文件系统,管理内部的表和数据,负责读取class文件里面字节码,然后转换成不同操作系统的CPU指令,从而使得Java程序在不同的操作统上顺利的跑起来。所以Window的JVM能把字节码转换成Window系统的指令集,Linux的JVM能把字节码转换成Linux系统的字节,同理还有Solaris,它们彼此之间是不能通用的。 最早一款的原型虽然是Sun公司开发的,但发展到现在其实任何厂商都可以自己去实现一个虚拟机,用来读取字节码转换成OS指令。甚至我们可以认为JV ...
1,最近一直在看云风的博客,渐渐地我也开始接受云风对于c++的态度了。 引用孟岩一段话引用软件开发方面真正有价值的进步,应当是有利于用户、有利于项目管理、有利于解决领域问题,而不是有利于程序员。多年以来,主流语言和系统的很多改进,其目的都是为了让写程序的人感觉更爽,而与用户、管理和解决问题毫无关系。C++在这方面是带了一个很坏的头,又要追求强大的表达能力,又要追求不打折扣的效率,结果搞出一大堆诸如操作符重载,template meta-programming之类的东西。     云风的话对我尤其触动很大“这些年之所以还在孜孜不倦的学习研究c++,就是为了说服自己不去使用它”。 2,一些别人的感 ...
1,工作定了后,把《Inside the C++ object model》又重新看了一遍,之前不太理解的差不多都看明白了,有空好好总结下发上来。 这个算是其中的一个点吧,之前根本没留意,所以特意写一篇记录下。 #include <iostream> using namespace std; class A { public: A (int m = 0, int n = 0) : i(m), j(n) {} virtual ~A() {} int i; int j; }; int main() { A a; ...
1,留个代码,便于遗忘后快速想起来。 #include <stdio.h> int main() { union { unsigned char sa[4]; unsigned long lv; }u2; u2.lv = 0x12345678; printf("%x\n", u2.sa[0]); //输出78,低位低地址, 原来是小端. union { unsigned short sa[2]; unsig ...
1,构造函数中调用虚函数的问题。 注:一般编译器都会在执行完base subject的构造函数和调用用户代码之前,实施当前对象vptr的初始化工作。 因此,如果当前对象内定义了某函数,构造函数中调用的一定是当前对象内的,virtual可以认为不存在。 实例代码: #include <iostream> using namespace std; class Base { public: Base() { f(); } virtual void f() { cout << ...
1,总结一句话:由内向外,找到合适的即刻停止。 实例代码: #include <iostream> using namespace std; class A { public: virtual ~A() {} virtual void f() { cout << "A::f\n"; } }; class B : virtual public A //虚继承,防止f产生二义性 { public: void f() { cout & ...
1,分析: 这个题其实就是最大子矩阵,只不过把0的权设为1,其他的权设为负无穷,这样求出来的肯定是最大的全是0的矩阵,仔细看一下我得做法,用的是动态规划。 2,实例代码: #include <cstdio> const int Max_Int = 0xfffffff; int map[301][301],opt[301]; int n, m, maxn; void init( ) { int i, j, t; scanf("%d%d", &n, &m); for ( i = 0; i < ...
很长时间没有更新blog了,先唠叨两句. 这段时间发生了几件不大不小的事吧. (1)工作暂时签tencent了,会不会有变数谁也不知道.也许通向网易的路还没有完全堵死. (2)javaeye一度居然真的上不去了,于是正在考虑是否该有个新家了. (3)知道了云风,对网易更加的有爱了. 言规正传,开始正式的内容. 1,给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1: 可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 (1)遍历文件a, ...
1, #include <iostream> using namespace std; class A { public: virtual ~A() {} virtual void f() { cout << "A::f\n"; } }; class B : virtual public A { public: void f() { cout << "B::f\n"; } }; c ...
1,虚基类,其构造函数总是在最后一个层次最先并且真正被执行。 实例代码: #include <iostream> using namespace std; class A { public: A(const string& s) { cout << "A " << s << endl; } virtual ~A() {} }; class B { public: B(const string& s) { ...
1,C++语言是静态语言,而把构造函数写成虚函数意味这可以动态构造。 这是和C++静态语言特性相矛盾的,所以就C++语言本身来说,是不允许的。 2,虚函数是为了迟绑定吧,为什么要迟绑定? 因为好多行为编译期确定不了,需要运行期确定并调用合适的函数去完成相应的功能。 但是对象构造的行为是确定的,不管是不是多态,只要有new Object()这种动作,就一定会沿着继承的顺序依次执行对象的构造。 这种确定的没有必要的事情,编译器开发的时候也就不会考虑这种机制.
Global site tag (gtag.js) - Google Analytics