- 浏览: 512048 次
- 性别:
- 来自: 北京
最新评论
-
jkxydp:
算法运行的结果根本就不对。
BM算法. -
soarwindzhang:
感谢博主的分享,我今天看了您的UFSET非递归的路径压缩时感觉 ...
并查集 -
zhangning290:
楼主好像只考虑了坏字符规则,。没有考虑好后缀
BM算法. -
lsm0622:
文字描述有错误 误导新学者
求有向图的强连通分量(scc):Tarjan算法 -
knightchen:
博主,你太强了!这篇文章对我学习C++多线程很有帮助!谢谢
并发学习之一_windows下ZThread在CodeBlocks上的安装与配置
文章列表
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()这种动作,就一定会沿着继承的顺序依次执行对象的构造。
这种确定的没有必要的事情,编译器开发的时候也就不会考虑这种机制.