数据结构C++描述----应用标准模板库
文章平均质量分 90
genovia
这个作者很懒,什么都没留下…
展开
-
C++基本语法1--C++程序设计教程/钱能主编--清华大学出版社
5.7 内联函数 有些函数使用频率较高,但代码短小。 将函数声明为inline。 例如:inline int func(); 编译器看到inline后,为该函数创建一段代码,以便在后面每次碰到该函数的调用都用相应的一段代码来替换。内联函数可以在一开始仅声明一次。 内联函数中,不能含有复杂的结构控制语句,如switch,while。如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码。 另外,递归函数是不能被用来做内敛函数的。 内联函数只适合于只有1--5行的小函数。对一个含有原创 2010-08-07 20:49:00 · 1172 阅读 · 0 评论 -
第六章 表容器和迭代器
6.1 表容器 表容器是按位置保存元素的数据结构。然而,与向量不同的是,她不提供直接按位置访问元素的外部索引机制。而且,表中的每个元素包含指明序列中下一个和上一个元素的链接。这些项列成一行,从第一个元素(称为表头)开始,按连续次序到最后一个元素(称为表尾)。 定位元素的过程采用顺序扫描的方式,从表头开始,逐项朝前移动,直到指定的元素。类似的扫描从表尾开始,想表头移动,直到出现匹配项。 6.1.1 表ADT 此类用3个构造函数声明表对象。构造函数形式和向量类使用的相同。默认的构造函数生成一个空表,其他原创 2010-08-19 16:50:00 · 522 阅读 · 0 评论 -
c++关键字explicit使用指南
<br />explicit作用:<br />在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。<br />explicit使用注意事项:<br /> *<br /> explicit 关键字只能用于类内部的构造函数声明上。<br /> *<br /> explicit 关键字作用于单个参数的构造函数。<br /> * 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构转载 2010-08-19 15:14:00 · 645 阅读 · 0 评论 -
C++ 枚举类型的思考
<br />C++ 中的枚举类型继承于 C 语言。就像其他从 C 语言继承过来的很多特性一样,C++ 枚举也有缺点,这其中最显著的莫过于作用域问题——在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型。例如下面的示例:<br />enum FileAccess {<br /> Read = 0x1,<br /> Write = 0x2,<br />};<br />FileAccess access = ::Read; // 正确<br />FileAccess access =转载 2010-08-22 16:49:00 · 344 阅读 · 0 评论 -
第八章 队列和优先级队列
队列:允许从队列的两端对数据进行操作。队列从队尾加入数据,从队首删除数据。 queue类 构造函数 queue() 创建一个空队列 queue类 操作 bool empty() const; T& front(); const T& front() const; void pop(); void push(const T& item); int size()原创 2010-08-22 17:02:00 · 684 阅读 · 0 评论 -
第七章 栈
7.1 栈ADT 栈是数据项序列,只能在序列的一端访问这些数据项。push()操作在栈顶增加一项。pop操作删除最后添加到栈上的项,我们称栈有LIFO(后进先出)顺序。 push和pop操作改变了栈。有时,需要在不删除最上面的元素的情况下访问最上面的元素。为了达到这个目的,ADT给了操作top();只有这个操作可以对栈中的元素进行访问,因为只有最上面的元素是可见的。 栈的抽象定义允许任意大的序列。因此,push操作没有前提条件。但是pop和top不同,这两个操作有前提条件,因为除非栈至少有一个元素(非原创 2010-08-21 10:07:00 · 633 阅读 · 0 评论 -
第九章:链表
我们需要设计一种新的表数据结构,这种数据结构允许元素分散于内存的各个位置,并不强求他们都在一个连续的内存块里。为了建立表元素之间的链接,每个元素结构都要包含指向临近元素在内存中位置的指针。这种结构叫做链表。 9.1 链表节点 要在计算机上实现链表,第一步就是建立节点结构。在节点结构中,包括数据(称作nodeValue)和一个指针(next),她指向序列中的下一个节点。 一般来说,类的数据成员应该声明为private的,通过public的成员函数来访问和更新他们。但是,node类只是为实现单向链表而设计原创 2010-08-25 18:54:00 · 772 阅读 · 0 评论 -
第十章 二叉树
10.1 树结构 树是一种层次化的结构,各个元素存储在树枝上,树枝从根开始向下延伸。 树节点按照所在的高度被划分为不同的层,根节点在最高层。任何节点都可以有多个后继,这些后继比该节点低一个层次。所以,树是一种非线性结构。在广义树中,每个节点可以有多于两个的后继节点,但他们的应用有限。二叉树中每个节点最多有两个后继节点。 在一棵树中,有一个唯一的起始节点,称为根节点。其余的节点都从根节点延伸出来。每一个节点包含一个值和零个或多个指向后继节点的指针。 从父节点P到其子树中某一个节点N的路径由一系列节点组原创 2010-09-01 21:49:00 · 596 阅读 · 0 评论 -
第十一章 关联容器
关联容器根据键来存储数据元素。键由一项或多项属性组成,可以唯一的标识数据元素。 作为一种ADT , 关联容器与以前章节中的向量,表等顺序容器很相似。她是另外一种存储结构,提供了不同的方法来访问和修改元素。主要的不同之处在于,容器类使用键获取元素,而不是通过下标或者线性搜索算法。在使用键时,不用考虑元素在容器中物理存储方式,也不必考虑操作函数如何在建和数据元素间建立联系。 STL提供了两种关联容器:集合(set) 和 映射(map) 。中两种容器的元素结构不同。在集合中,数据元素的值就是键,但在映射中,存原创 2010-09-02 21:49:00 · 546 阅读 · 0 评论 -
高级关联结构 --- 哈希表
哈希表根据元素的值,把他们分布到各个簇中。哈希函数是一种关联函数,她把数据项映射到一个簇中,于是哈希表可以在该簇里进行添加,更新和删除数据的操作。与二叉搜索树一样,哈希表也可以用来实现集合和映射。但与二叉搜索树不同的是,哈希表的迭代器不能按元素的大小顺序访问他们。因此,用哈希表实现的集合与映射是无序的关联容器。 STL中没有哈希表类,也没有提供无序关联容器。 12.1 哈希表 哈希表:表中的每个元素都有唯一的键与之对应。这种关联结构的主要特征是哈希函数,她用键作为参数,并返回表中的某项的入口。可以把哈原创 2010-09-04 14:28:00 · 799 阅读 · 0 评论 -
多重集合set 的list实现详解
#ifndef MINIMULTISET_H #define MINIMULTISET_H #include #include #include using namespace std; template class miniMultiSet { public: typedef typename list::iterator iterator ; typedef typename list::con原创 2010-09-03 21:18:00 · 657 阅读 · 0 评论 -
c++常用函数所在头文件一览
c++常用函数所在头文件一览<br /> 函数 包含 类别 功能<br /> <br />_atold math.h 数学子程序 把字符串转换为浮点数<br />_beginthread process.h 进程控制子程序 启动执行一个新线程<br />_bios_disk bios.h 接口子程序转载 2010-09-29 14:02:00 · 832 阅读 · 0 评论 -
C++文件操作
<br />ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;<br />在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:<br />1、插入器(<<)<br />向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<”Write Stdout”<<’/n’;就表示把字符串”Write Stdout”和换行字符(‘/n’)转载 2010-08-19 15:32:00 · 1645 阅读 · 1 评论 -
c++异常处理机制示例及讲解
下面的代码直接贴到你的console工程中,可以运行调试看看效果,并分析c++的异常机制。 #include "stdafx.h" #include #include #include // 内存泄露检测机制 #define _CRTDBG_MAP_ALLOC #ifdef _DEBUG #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif // 自定义异常类 class MyExc原创 2010-08-18 09:18:00 · 552 阅读 · 0 评论 -
第一章:数据结构入门
1.private 只有类的成员函数可以访问它 public 任何对象都可以访问 2.常量成员函数:在ADT的描述中,后置条件指明操作如何影响数据成员。如果操作不改变对象中的任何数据,则在原型中添加const关键字,相应的函数称为常量成员函数。int getHour()const; 3.c++允许程序通过常量引用传递对象,对数据只能进行只读访问。在参数表中,在类型前添加关键字const。 returnType func(const type &arg1. 。。。);使用常量引用可以保护对象数据的完整原创 2010-08-05 16:59:00 · 668 阅读 · 0 评论 -
第二章:对象设计艺术
2.4 运算符重载 在程序设计中,我们书写涉及运算符+、*、文件具有istream 和ostream这两个类,分别提供数据流输入和数据流输出。这些类为基本类型char,int,short,long,float,double声明数据流运算符>。这些都是二元运算符,做运算数是数据流,右运算数是变量或字面值。 对于输出,>将数据从数据流取出,并用他更新变量的数值。 输出:>): istream& operator>> (istream& istr, classname& obj); 在这种情况下,IO数原创 2010-08-07 10:05:00 · 498 阅读 · 0 评论 -
C++基本语法3--C++程序设计教程/钱能主编--清华大学出版社
第十六章 继承 virtual 作用:多态性、抽象类、虚拟继承 16.2 继承的工作方式: class Student { ///////////////////////// }; class GraduateStudent : public Student { /////////////////////////////////////// }; 16.4 继承与组合 类以另一个类对象做数据成员,称为组合。 16.5 多态性 C++允许子类的成员函数重载基类的成员函数。 c原创 2010-08-10 13:50:00 · 833 阅读 · 0 评论 -
C++基本语法2--C++程序设计教程/钱能主编--清华大学出版社
第十五章 静态成员与友元 15.2 静态成员的使用; 静态数据成员在类声明外分配空间和初始化 调用静态数据成员用类名类引导 调用静态成员函数用类名来引导 静态数据成员要实际的分配空间,故不能在类声明中定义(只能声明数据成员)。类声明只声明一个类的“尺寸与规格”,并不进行实际的内存分配,所以在类的声明中写成定义“static int noOfStudents = 0”是错误的。他也不能在头文件中类声明的外部定义,因为那会造成在多个使用该类的源文件中,对其重复定义。 静态数据成员也不能在main函原创 2010-08-10 13:08:00 · 1069 阅读 · 0 评论 -
C++基本语法4--C++程序设计教程/钱能主编--清华大学出版社
第十八章 运算符重载 C++规定 . // ::// .* // .- >// ?: 这5个运算符不能重载,也不能创造新运算符。 为什么operator + () 中的参数用引用传递而不用指针传递? 主要为了可读性。 如果只给出一个operator ++ ()定义,那么他一般可用于前缀后缀两种形式。d++和++d不做区别。 一个运算符成员形式,将比非成员形式少一个参数,左边参数是隐含的。 例如:RMB 是一个类,假定operator + ()是其成员函数或不是两种情况下的定义 RMB原创 2010-08-11 11:47:00 · 894 阅读 · 0 评论 -
C++基本语法5--C++程序设计教程/钱能主编--清华大学出版社
第十九章 IO流 类ofstream用于执行文件输出(向文件输入内容) ofstream::ofstream(char * pFileName , int mode = ios::out,int prot = filebuf::openprot); 打开一个输入文件: ifstream( const char* szName, int nMode = ios::in, int nProt = filebuf::openprot ); 打开同时用于输入和输出的文件: fstream( const原创 2010-08-11 11:34:00 · 670 阅读 · 0 评论 -
第三章:算法概述
3.5.1 模板语法 模板函数的模型和实现从一个模板参数表开始。其语法包括关键字template,后面紧跟用角扩号括起来的形式类型的非空表在这个参数表中,每种类型前面都有关键字typename , 不同的类型之间用逗号隔开。 //一个模板类型的参数表 template //多个模板类型的参数表 template 尽管不是必须的,但C++程序员通常使用T表示模板参数中的类型。当程序使用模板函数时,编译器会把T与实际的C++类型联系起来,如整形或字符型,或者程序员自定义的类型,然后,用指定的C+原创 2010-08-15 16:01:00 · 484 阅读 · 0 评论 -
C++中typename关键字的使用方法和注意事项
<br />1, 什么地方使用?用在模板定义里,标明其后的模板参数是类型参数。<br />例如<br /> <br />template<typename T, typename Y><br />T foo(const T& t, const Y& y){//....};<br />templace<typename T><br />class CTest<br />{<br />private:<br /> T t;<br />public:<br /> //...<br />}<br /> <br /转载 2010-08-16 09:38:00 · 539 阅读 · 0 评论 -
第四章 向量容器 --项目设计题--排序算法的性能比较
#include #include #include #include using namespace std; ///////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// template原创 2010-08-16 11:37:00 · 473 阅读 · 0 评论 -
第四章 向量容器
标准模板库(STL)把他的类组织为3种种类:顺序容器、适配器容器和关联容器。 4.1 标准模板库包含10种容器类。根据元素的次序和访问数据的不同操作类型,标准模板库将这些容器进行分类。STL容器类的3个种类为:顺序容器、适配器容器和关联容器。 顺序容器按照线性次序位置存储数据。 关联容器按键存储元素。程序通过键访问关联容器中的元素,这些键可能与元素在容器中的位置无关。 适配器包含另一个容器作为其基本存储结构。 顺序容器:向量,双端队列,表 适配器容器:栈,队列,优先级队列 关联容器:集合,多重原创 2010-08-15 20:22:00 · 990 阅读 · 0 评论 -
第五章 指针和动态内存
用指针管理内存是数据结构中指针最重要的功能。 5.1 C++指针 指针是变量,因此,赋值语句能够把一个指针的值复制到另一个指针。左边的指针变量得到一个新值(地址),并与右边的指针指向同一数据项。 5.1.4 数组和指针 int arr[]; 编译器还能依据声明把指针与指针指向的数据项类型和大小联系起来。此时,编译器识别出数据项的字节数。因此,指针arr可以是形式为arr+i 的算术表达式的一部分。表达式的值为arr中第i个元素地址。 arr+1 是arr[1]的地址;arr+2 是arr[2]的地原创 2010-08-17 17:28:00 · 643 阅读 · 0 评论 -
c++中类的大小问题
以下的讨论都是在不用#pragma pack( num )下的结果,num表示以多少个字节对齐。初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的转载 2012-08-29 11:03:26 · 753 阅读 · 0 评论