`
kmplayer
  • 浏览: 512456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
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,抛弃"/*...*/",改用"//"
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 ...
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 ...
Global site tag (gtag.js) - Google Analytics