程序的输入是指从输入文件讲数据传送给程序,程序的输出是指从程序将数据传送输出文件。
C++输入输出包含以下三方面内容:
对系统指定标准设备的输入和输出。即从键盘输入数据,输出到显示器。这种输入输出称为标准输入输出,简称标准IO。
以外出磁盘文件为对象进行输入输出,即从磁盘文件输入数据,将数据输出到文件。以外存为对象的输入输出称为文件的输入输出,简称文件IO。
度内存中指定的空间进行输入输出,通常指定一个字符串数组作为储存空间(实际上可以利用该空间储存任何信息)。这种输入输出称为字符串输入输出,简称串IO。
在C语言中,用printf和scanf进行输入输出,往往不能保证所输入输出的数据是否可靠安全。在C++的输入输出中,编译系统对数据进行严格的检查,凡是类型不正确的数据都不可能通过编译。因此C++的IO操作是类型安全(type safe)的。C++的IO操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。
C++通过IO类库来实现丰富的IO功能。这样使C++得输入输出明显优于C语言中的printf和scanf,但是也为之付出代价,C++IO系统变得比较复杂,要掌握许多细节。
C++编译系统提供了用于输入输出的iostream类库。iostream这个单词是由3个部分组成,即i-o-stream,意为输入输出流。在iostream类库中包含许多用于输入输出的类。
cerr流对象
cerr流对象是标准错误流,cerr流已被指定为与显示器关联。cerr的作用是向标准错误设备输出有关的出错信息。cerr与标准输出流cout的作用和用法差不多。但有一点不同:cout流通常是传送的显示器输出,但也可以被重定向输出到磁盘文件,而cerr流中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器书及时输出,这时应该用cerr.cerr流中的信息是用户根据需要指定的。
clog流对象
clog流对象也是标准错误流,他是console log的缩写。他的作用和cerr相同,都是在终端显示器上显示出错信息。区别:cerr是不经过缓冲区,直接向显示器输出有关信息,而clog中的信息存放在缓冲区,缓冲区满或遇endl时向显示器输出.
#include <iomapip>
文件流类和文件流对象
输入输出是一系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在时间应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。
和文件有关系的输入输出类主要在fstream.h这个头文件中被定义,在这个头文件中主要被定义了三个类,有这三个类控制对文件的各种输入输出操作,他们分别是:ifstream,ofstream,fstream,其中fstream是由iostream派生而来。
由于文件设备不像显示器和键盘那样是标准默认设备,所以他在fstream.h头文件中没有像cout那样预先定义的全局对象,所以我们必须自己定义对象.
STL(标准模板库)
STL (Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现在主要出现在C++中,但在被引入C++之前该技术已经存在很长一段时间。
STL从广义上讲分三类:algorithm(算法),container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝的连接。几乎所有的代码都采用了模板类和模板函数的方式,这相比传统的有函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织13个头文件:
algorithm,deque,functional,iterator,vector,list,map,memory,numeric,queue,set,stack和utility.
使用STL的好处
1)STL是C++的一部分,因此不需要额外安装什么,它被内置在编译器之内。
2)STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但是这种分离确实使得STL变得非常通用。
3)程序员可以不用思考STL具体的实现过程,只要能够熟练使用STL就OK了。这样他们就可以把精力放在程序开发的方面。
4)STL具有高度可重用性,高性能,高移植性,跨平台的优点。
序列式容器
每个元素都有固定位置--取决于插入时间和地点,和元素值无关。
关联式容器
元素位置取决于特定的排序准则,和插入顺序无关
String概念
string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常使用char表示。string和char都可以表示字符串,那么二者有什么区别.
string和char比较
string是一个类,char是一个指向字符的指针。
string封装类char,管理这个字符串,是一个char的容器.
string不用考虑内存释放和越界.
string管理char所分配的内存.每一次string的复制,取值都有string类负责维护,不用担心复制越界和取值越界。
string提供了一系列字符串的操作还是
find copy erase replace insert.
Vector容器
vector是将元素置于一个动态数组中加以管理的容器.
vector可以随机存取元素(支持索引直接存取,用[]操作符或at()方法)
vector尾部添加或移除元素非常快速,但是在中部或头部插入元素或移除元素比较费时.
迭代器基本原理
迭代器是一个"可遍历STL容器内全部或部分元素"的对象。
迭代器指出容器中的一个特点位置
迭代器就如同指针
迭代器提供对一个容器中对象的访问方法,并且可以定义了容器中对象的范围
输入迭代器:也叫“只读迭代器”,它从容器中读取元素,只能一次读取一个元素向前移动,只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列
输出迭代器:也叫“只写迭代器”,它往容器中写入元素,只能一次写入一个元素向前移动,只支持一遍算法,同一个输出迭代器不能两遍遍历一个序列
正向迭代器:组合输入迭代器和输出迭代器的功能,还可以多吃解析一个迭代器指定的位置,可以对一个值进行多次读写。
双向迭代器:组合正向迭代器的功能,还可以通过--操作符向后移动位置.
随机访问迭代器:组合双向迭代器的功能,还可以向前向后跳过任意个位置,可以直接访问容器中任何位置的元素。
目前教程所用到的容器,都支持双向迭代器或随机迭代器