- 浏览: 512456 次
- 性别:
- 来自: 北京
最新评论
-
jkxydp:
算法运行的结果根本就不对。
BM算法. -
soarwindzhang:
感谢博主的分享,我今天看了您的UFSET非递归的路径压缩时感觉 ...
并查集 -
zhangning290:
楼主好像只考虑了坏字符规则,。没有考虑好后缀
BM算法. -
lsm0622:
文字描述有错误 误导新学者
求有向图的强连通分量(scc):Tarjan算法 -
knightchen:
博主,你太强了!这篇文章对我学习C++多线程很有帮助!谢谢
并发学习之一_windows下ZThread在CodeBlocks上的安装与配置
文章列表
1,二叉树是否是一个堆,由两个性质决定:
(1)顺序:任何结点的值都小于或等于其子节点的值;
(2)形状:最多两层上具有叶子结点,其中最底层的叶子节点尽可能的靠左分布.树中不存在空闲的位置,即所有结点到根结点的距离都不超过log2n.
2,树中常见的函数定义如下:根结点位于x[1]
root=1
value(i)=x[i]
leftchild(i)=2*i
rightchild(i)=2*i+1
parent(i)=i/2
null(i)=(i<1)or(i>n)
如下图:
3,关键函数:siftup
策略:尽可能地将元素向上筛选,直到元素大于其父结点或位于树根.
结果:如 ...
1,关于STL中的priority_queue:确定用top()查看顶部元素时,该元素是具有最高优先级的一个元素.
调用pop()删除之后,将促使下一个元素进入该位置.
2,如同stack和queue,priority_queue是一个基于基本序列容器进行构建的适配器,默认的序列器是vector.
先看一个示例:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <queue>
#include <functional>
using names ...
1,优先级队列是不同于先进先出队列的另一种队列。
最大优先级队列,是这样的一种队列结构,它的内部存放着一系列的元素,每个元素都对应着一个最优级,
最大优先级队列不管各元素的入队顺序,在出队时,总是对应优先级 ...
1,多继承带来的一个根本性的复杂性:模棱两可.
例如:
#include <iostream>
using namespace std;
class Lottery
{
public:
virtual void draw() { cout << "Lottery" << endl; }
};
class GraphicalObject
{
public:
virtual void draw() { cout << "GraphicalObject" << ...
1,彻底了解不同的面向对象架构在C++中的意义.
2,声明一个非虚拟成员函数的意思是:这个函数的不变性凌驾于变异性之上.
3,最重要的一些观点:
(1)共同的base class:意味着共同的特性.
(2)Public inheritance:意味着"是一种(isa)":
class D : public class B:每个D对象也是一个B对象.
(3)Private inheritance:意味着"根据某物实现"
class D : private class B:D对象根据B对象实现,但是B和D没有任何概念上的关系.
(4)Lyaing:意味着& ...
1,先看一个例子:
class Address { ... }; // where someone lives
class Person
{
public:
Address& personAddress() { return address; }
private:
Address address;
};
Person scott();
Address& addr = scott.personAddress(); //addr看作一个全局对象
这个时候addr乘了scott.address的另一个名称,可以通过addr任意 ...
1,这个实例采用了使用计数策略.
2,实例代码:
#include <iostream>
#include <string>
#include <set>
#include <map>
#include <utility>
#include <cstddef>
#include <stdexcept>
#include <algorithm>
using namespace std;
class Item_base
{
friend istream& opera ...
1,虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核文件的完美交互.
提供了三个重要的能力:
(1)将主存看作一个存储在磁盘上的地址空间的高速缓冲,在主存中只保存活动区域,根据需要在主存和磁盘之间来回传送数据.
(2) ...
所谓"书越读越薄",这话说得真是有道理.
最近频繁面试,不得已重温了下primer.
1,C++语言设计的主要目标:允许程序员定义自己的类,它们用起来和内置类型一样容易直观.
2,在普通的非const成员函数中,this的类型是T * const,即:this本身不能改变.
3,如果返回类型使用类定义的类型,则必须使用完全限定名.
例如:
class Screen
{
public:
typedef std::string::size_type index;
index get_cursor() const;
};
inline Screen::inde ...
sizeof(string对象)的大小
- 博客分类:
- 语法函数
1,无语了,string对象的大小固定就是4啊.
2,实例代码:
#include <iostream>
using namespace std;
void func(const string& t)
{
cout << sizeof(t) << endl;
cout << t.size() << endl;
}
int main()
{
char * str="1234567";
func("1234567");
...
1,先看个例子:
class Person { ... };
class BankAccount
{
public:
BankAccount(const Person *primaryOwner,
const Person *jointOwner);
virtual ~BankAccount();
virtual void makeDeposit(double amount) = 0;
virtual void makeWithdrawal(double amount) = 0;
virtual double balance() const = ...
1,scanf和printf的缺点:不具有型别安全(type-safe)性质,不可扩充.
而型别安全和扩充性正是C++的基石之一.
2,某些情况下,还是需要回头使用以前的东西:
(1)某些iostream的实现效率比不上对应的c stream函数.
而你的程序将此差异视为一个重要因素.
注:效率问题对一般的iostream并不成立.
(2)移动性的考虑.
某些需要最大移植能力的应用程序可能会发现不同的iostream版本支持不同的标准.
(3)由于iostream中的class有constructor,而且还可能牵扯到static对象的初始化次序问题,这时候c标准库函数可能比较简单.
1,意思就是"尽量以编译器(compiler)"取代预处理器(preprocessor)"
2,如果你这么做:
#define PI 3.14
PI可能在编译之前就先被预处理器移走了,也没有机会被编译器看见.结果,PI没有进入符号表.
一个既简单又有效率的做法:使用常量.
const double PI = 3.14;
3,有时,我们需要定义一个class的专属常量,即这个常量的生存空间局限于class内.
我们可以这么做:
class GamePlayer
{
public:
static const int NUM = 5; //常量的声明和初始化,不是定 ...
1,先搞清楚private inheritance的行为:
(1)如果class之间是私有继承的关系,编译器不会将一个派生类自动转化为基类.
(2)由基类继承而来的所有成员,在派生类中都会变成private.
2,私有继承:只有实现部分被继承,接口部分应略去.
因此,如果你让D私有继承B,那么你是想采用class B内的某些程序代码,而不是因为B和D的对象有任何概念关系存在.
3,回想一下,laying的意义也是这样.那么如何在laying和private inheritance之间取舍呢?
尽可能使用laying,必要时(当protected members或虚函数牵扯进来)才使用priv ...