摘要:最初设计流的目的是用于文本,因此默认的输出模式就是文本方式。在以文本模式输出时,若遇到换行符(十进制10)便自动被扩充为回车换行符(十进制13和10)。这种自动扩充有时可能出问题,请看下列程序: #include<fstream>using namespace std;int iarray[2] =
阅读全文
摘要:输出流成员函数有三种类型: 与操作符等价的成员函数; 执行非格式化写操作的成员函数 其他修改流状态且不同于操作符或插入运算符的成员函数 对于顺序的格式化输出,可以仅使用插入运算符和操作符。对于随机访问二进制磁盘输出,使用其他成员函数,使用或不使用插入运算符。 1、输出流的open函数 2、输出流的c
阅读全文
摘要:就像C语言一样,c++语言中也没有输入/输出语句。但c++编译系统带有一个面向对象的输入/输出软件包,它就是I/O流类库。 1、I/O流的概念及流类库结构 I/O流类库是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品。 当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,
阅读全文
摘要:1、函数对象 函数对象是STL提供的第四类主要组件,它使得STL的应用更加灵活方便,从而增强了算法的通用性。大多数STL算法可以用一个函数对象作为参数。所谓“函数对象”其实就是一个行为类似函数的对象,它可以不需要参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。 在c++程序设计中,
阅读全文
摘要:标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板。 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置。迭代器查找元素的位置并将这些信息提供给算法以便算法能够访问这些元素。算法不必关心具体的元素存储在容器中什么位置的细节,通常情况下,算法也不必直到存储元素的
阅读全文
摘要:理解迭代器对于理解STL框架并掌握STL的使用至关重要。简单地说,迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法。 虽然指针也是一种迭代器,但迭代器却不仅仅是指针。指针可以指向内存中的一个地址,通过这个地址就可以访问相应的
阅读全文
摘要:容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类。他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器。 1、标准栈容器 使用STL中的标准栈为程序员提供了一层附加的保护,下溢和上溢的情况在发生之间就会被捕获。 标准栈容器是使用适配器与一种基础容器相结合来实现的。使
阅读全文
摘要:列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历。列表容器是需要按顺序访问的容器。另外,列表容器不支持随机访问迭代器,因此某些算法不能适合于列表容器。列表容器还提供了另一种操作 拼接(splicing),其作用是将一个序列中的元素插入到另一个序列中。其头文件为<list> 1、
阅读全文
摘要:双端队列容器是一种放松了访问权限的队列。除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问。 它提供了直接访问和顺序访问方法。其头文件为<deque>。 1)双端队列容器的构造函数 有4中形式的构造函数: deque();//构造size()为0的双端队列容
阅读全文
摘要:向量容器属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问)。这一点与c++语言支持的基本数组类型相同,但基本数据类型不是面向对象的。而面向对象的向量是动态结构,他的大小不固定,可以在程序运行时增加或减少。 向量容器可以用来实现队列、栈、列表和其他更加复杂的结
阅读全文
摘要:顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的。顺序容器可用于存储线性群体。 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系,与顺序容器类的元素存储和检索方式完全不同。 对顺序容器的访问分为顺序或直接(也称随机)两种。 容器类
阅读全文
摘要:有效地利用已有的成果,将经典的、优秀的算法标准化、模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想。 c++语言提供的标准模板库(standard template library,STL)便是对象对象程序设计和泛型程序设计(Ge
阅读全文
摘要:同样可以用数组或链表来存储队列中的元素。由于队列操作不同于一般线性群体操作的特殊性,需要专门涉及队列类。 队列也有三种基本状态:一般状态、对空、队满。 无论采用那种数据结构,队列类的数据成员都应该包括:队列元素、队头指针、队尾指针。 队列类中函数成员应该能够实现下列基本操作:初始化、入队、出队、清空
阅读全文
摘要:栈是一种线性群体,因此栈的数据可以用数组或链表来存储。 由于栈的访问特性,故直接用数组类和链表类来解决栈的问题是不合适的,而是需要专门设计栈类。 要完整地保存栈的信息,栈类的数据成员至少应该包括栈元素和栈顶指针。由于栈元素即可以用数组也可以用链表来存放,栈类的结构也就有了两种:基于数组和基于链表。基
阅读全文
摘要:链表是一种动态数据结构,可以用来表示顺序访问的线性群体。 链表的第一个结点称为头结点,最后一个结点称为尾结点,尾结点的后继指针为空(NULL)。 1、结点类 链表的结点包括数据和指针域,是链表的基本构件。结点的数据域用于存放群体中元素的内容。即可以是若干个基本类型的数据,也可以是自定义类型的数据,甚
阅读全文
摘要:1、线性群体的概念 线性群体中的元素次序与其位置关系是对应的。在线性群体中,又可按照访问元素的不同方法分为直接访问、顺序访问和索引访问。 对可直接访问的线性群体,我们可以直接访问群体中的任何一个元素,而不必首先访问该元素之前的元素。 对顺序访问的线性群体,只能按元素的排列顺序从头开始依次访问各个元素
阅读全文
摘要:基本数据类型是c++编译系统预定义的,而自定义类型的数据是由多个基本类型或自定义类型的元素组成的,我们称之为群体数据。 对于群体数据,仅有系统预定义的操作是不够的,在很多情况下,还需要设计与某些具体问题相关的特殊操作,并按照面向对象的方法将数据与操作封装起来,这就是群体类。 群体可以分为两种:线性群
阅读全文
摘要:抽象类是一种特殊的类,它为一个类族提供统一的操作界面。抽象类是为了抽象和设计的目的而建立的,可以说,建立抽象类,就是为了通过它多态地使用其中的成员函数。抽象类处于类层次的上层,一个抽象类自身无法实例化,也就是说我们无法定义一个抽象类的对象,只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化。
阅读全文
摘要:虚函数是动态绑定的基础。虚函数必须是非静态的成员函数,虚函数经过派生之后,在类族中就可以实现运行过程中的多态。 根据类型兼容规则,可以使用派生类的对象代替基类对象。如果用基类类型的指针指向派生类对象,就可以通过这个指针来访问该对象,问题是访问到的只是从基类继承来的同名成员。解决这一问题的办法是:如果
阅读全文
摘要:1、c++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型(如类),也需要有类似的运算操作。例如,下面的程序段定义了一个复数类: class complex { public: complex(double r=0.0,double i=0.0){real=r;imag=
阅读全文