鱼思故渊的专栏

不积跬步,无以至千里;不积小流,无以成江海

STL源码剖析--vector

vector容器概述       vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的...

2015-09-14 09:59:06

阅读数 1549

评论数 0

浅谈C++多态

C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。   多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(pol...

2015-09-05 09:44:21

阅读数 720

评论数 0

typeid详解

在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C+...

2015-08-25 15:11:12

阅读数 1449

评论数 0

函数模板的特化

函数模板的特化 该定义中一个或多个模板形参的实际类型或实际值是指定的。特化形式如下: 关键字template后面接一对空的尖括号(); 再接模板名和一对尖括号,及括号中指定这个特化定义的模板形参; 函数形参表 函数体 template int compare(const char *...

2015-07-15 08:21:27

阅读数 942

评论数 0

new/malloc的区别

1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 原型:extern void *malloc(unsigned int num_bytes);  说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针...

2015-07-15 08:17:59

阅读数 1250

评论数 1

C++--何时需要定义赋值/复制构造函数

继承和动态内存分配 假设基类使用了动态内存分配,而且定义了析构函数、复制构造函数和赋值函数,但是在派生类中没有使用动态内存分配,那么在派生类中不需要显示定义析构函数、复制构造函数和赋值函数。 当基类和派生类采用动态内存分配时,派生类的析构函数、复制构造函数、赋值运算符都必须使用相应的基类方法来处理...

2015-06-17 22:40:16

阅读数 1870

评论数 0

一个string类的简单实现

string类中使用到了赋值构造函数、复制构造函数、构造函数、默认构造函数、析构函数、重载操作符等一些类操作 class String { public: String() { data = new char; data[0]='\0'; length = 0; }...

2015-05-18 10:42:05

阅读数 1780

评论数 4

离散事件模拟--银行排队时间模拟

在数据结构中有个讲述如何模拟银行排队,最终算出每个人平均的逗留时间。 这是需要数据结构的知识。将银行的每个窗口看成是一个队列,那么对于每次来一个人,都需要从最短的队列进行排队。(其实更优秀的做法是从最短的等待时间队列来排队)。 这里的做法是这样的,首选在一个队列中插入一个人,整个事件是事件驱动的,...

2015-04-30 15:15:50

阅读数 2764

评论数 1

STL源码剖析--各个容器迭代器的分类

五类迭代器如下: 1、输入迭代器:只读,一次传递     为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取。一个输入迭代器仅能对它所选择的每个元素进行一次解析,它们只能向前移动。一个专门的构造函数定义了超越...

2015-04-23 17:35:03

阅读数 987

评论数 0

实现一个内存池管理的类

模拟STL中的freelist,有这个思想在内。 union obj { union obj* next; char p[1]; }; class MemoryPool { public: MemoryPool() ...

2015-04-16 21:13:14

阅读数 991

评论数 0

STL源码剖析--空间配置器

STL的设计非常巧妙,组件间互取短长,形成了一个世界,这是这个世界里的组件: 1. containers(容器):所谓容器,是指存放数据的地方,将数据以一定的方法组织存放。根据不同的组织方式,可以把容器分为顺序容器,如vector、deque、list,关联容器,如set、map。Contain...

2015-04-16 20:59:39

阅读数 843

评论数 0

STL源码剖析—整体简要概述

STL源码剖析—简要概述 首先需要明白STL内部各个组件以及组件之间的关系,STL号称是泛型编程的典范,泛型编程不仅仅是模板的高级应用,这里更多体现了整体的设计思想。 空间配置器、迭代器、容器、算法、仿函数、适配器,共六大组件,其中这里比较关心的就是前四个。这里面涉及了模板、模板的偏特化、模板的特...

2015-03-23 14:57:17

阅读数 757

评论数 0

C++ const引用、临时变量 引用参数

C++引用—临时变量、引用参数和const引用 如果实参与引用参数不匹配,C++将生成临时变量。如果引用参数是const,则编译器在下面两种情况下生成临时变量:          实参类型是正确的,但不是左值          实参类型不正确,但可以转换为正确的类型 左值参数是可被引用的数...

2015-02-05 11:48:25

阅读数 4273

评论数 0

C++基础知识--static成员和const成员函数

我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量)。能不能同时用static和const修饰类的称冠函数? 不能。C++编译器在实现const成员函数的时候为了确保该函数不能修改类的实例的状态,会在...

2014-12-31 11:25:04

阅读数 1534

评论数 0

深入探索C++对象象模型--拷贝构造函数、对象模型

拷贝构造函数 如果没有定义拷贝构造函数,那么编译器会自动生成一个拷贝构造函数,但是这个拷贝构造函数是有一定限度的。 一般来说这个拷贝构造函数是按照位直接拷贝的,但是在有些情况下这种初始化是有问题的,在特殊的四种情况下是有问题的,在有问题的情况下,可以举例说明。 如果一个有多态性质的对象,子类赋值给...

2014-12-27 19:37:49

阅读数 1027

评论数 0

深入探索C++对象模型--指针类型 & 多态机制

指针的类型 不同类型的指针,从内存需求的观点来说,没有什么不同!他们三个都需要足够的内存来繁殖一个机器地址,“指向不同类型之各指针”之间的差异,既不在其指针表示法不同,也不再其内容(代表一个地址)不同,而是在其所寻址出来的对象类型不同。也就是说,“指针类型”会导致编译器如何解释某个特定地址中的内...

2014-12-27 12:23:37

阅读数 1171

评论数 0

STL源码分析--空间配置器的底层实现 (二)

STL源码分析—空间配置器 空间配置器中门道 在STL中的容器里都是使用统一的空间配置器,空间配置器就是管理分配内存和销毁内存的。在STL将在heap空间创建一个对象分为两个步骤,第一是申请一块内存,第二是在这块内存中初始化一个对象。首先申请空间是由malloc提供,初始化一个对象时由cons...

2014-12-26 14:50:49

阅读数 761

评论数 0

STL源码分析--仿函数 & 模板的模板参数 & 临时对象

STL源码分析—使用的一些特殊语法 关于泛型编程中用到的一些特殊语法,这些语法也适用于平常的模板编程 1、  类模板中使用静态成员变量 Static成员变量在类模板中并不是很特殊,同时这个变量不属于对象,属于实例化以后的这个类类型。每一个实例化对应一个static变量 2、  类模板中可以...

2014-12-26 11:48:13

阅读数 946

评论数 0

Effective STL--不同容器删除特定元素的方法

输入迭代器是每个迭代位置智能被读一次的只读迭代器。输出迭代器是每个迭代位置只能被写一次的只写迭代器。输入和输出迭代器被塑造为读和写输入和输出流。前向迭代器有输入和输出迭代器的能力,但是他们可以反复读或写一个位置。它们不支持operator--,所以他们可以高效地向前移动任意次数。所有的标准STL容...

2014-12-25 10:45:30

阅读数 817

评论数 0

智能指针的实现--使用引用计数实现以及原理

一、智能指针   在C++语言编程时,当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。       智能指针(smart pointer)的一种通用实现技术是使用引用...

2014-12-24 22:36:21

阅读数 1218

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭