2017/03/27学习笔记

程序的输入是指从输入文件讲数据传送给程序,程序的输出是指从程序将数据传送输出文件。
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容器内全部或部分元素"的对象。
迭代器指出容器中的一个特点位置
迭代器就如同指针
迭代器提供对一个容器中对象的访问方法,并且可以定义了容器中对象的范围

输入迭代器:也叫“只读迭代器”,它从容器中读取元素,只能一次读取一个元素向前移动,只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列
输出迭代器:也叫“只写迭代器”,它往容器中写入元素,只能一次写入一个元素向前移动,只支持一遍算法,同一个输出迭代器不能两遍遍历一个序列
正向迭代器:组合输入迭代器和输出迭代器的功能,还可以多吃解析一个迭代器指定的位置,可以对一个值进行多次读写。
双向迭代器:组合正向迭代器的功能,还可以通过--操作符向后移动位置.
随机访问迭代器:组合双向迭代器的功能,还可以向前向后跳过任意个位置,可以直接访问容器中任何位置的元素。
目前教程所用到的容器,都支持双向迭代器或随机迭代器

时间: 2024-10-16 01:55:31

2017/03/27学习笔记的相关文章

2017/03/31学习笔记

双向链表 单向链表的节点都只有一个指向下一个节点的指针单向链表的数据元素无法直接访问其前驱元素逆序访问单向链表中的元素时极其耗时的操作双向链表在单向链表的基础上增加了指向前驱的指针功能上双向链表可以完全取代单向链表的使用 栈是一种特殊的线性表 栈仅能在线性表的一端进行操作栈顶:允许操作的一端栈底:不允许操作的一端首先它是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系.只不过它是一种特殊的线性表.定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底.他的特殊之处就在于

2017/04/27学习笔记

fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数执行另一个程序.当进程调用一个exec函数时,该进程的用户空间和数据完全被新程序替换,从新程序的启动例程开始执行.调用exec并不创建新进程,所以调用exec前后该进程ID不变.将当前进程的.text .data替换为所要加载程序的.text .data,然后让进程从新的.text第一条指令开始执行,但进程ID不变,换核不换壳. int execl();int execlp();int

2017/03/24学习笔记

类型转换 C语言中的强制类型转换很简单,不管什么类型的转换都是TYPE b=(TYPE)a; C++中类型转换提供了4种类型转换操作符来应对不同场合的应用.static_cast 静态转换.如int转换成charreinterpreter_cast 重新解释类型dynamic_cast 命名上理解是动态类型转换.如子类和父类之间的多态类型转换 (父类转子类,向下转型)const_cast 字面理解就是去const属性. 4种类型转换格式TYPE b=static_cast<TYPE>(a);

2017/03/17学习笔记

智能指针类 指针使用过程中,经常会出现内存泄漏和内存多次被释放.解决方案:boost库的智能指针项目开发中,要求开发者使用预先编写的智能指针类对象代替C语言中原生的指针.智能指针思想工程中的智能指针是一个类模板通过构造函数接管申请的内存通过析构函数确保堆内存被及时释放通过重载指针运算符*和->来模拟指针的行为通过重载比较运算符==和!=来模拟指针的比较 为什么不要重载&&和||操作符 &&和||是C++中非常特殊的操作符&&和||内置实现了短路规则操作

2017/03/11学习笔记

.lib资源模式文件 描述 .dll.dll 动态库(函数二进制码集合,里面有函数的函数体),动态库有规范(win/linux)下不一样. mtrace 是linux C编程内存泄漏检测工具,mtrace是三款工具中最简单易用的,mtrace是一个C函数,在<mckeck.h>里面声明及定义.其实mtrace是类似malloc_hook的malloc handler,只不过mtrace的hander function已由系统为你写好,既然如此,系统又怎么知道您想将malloc/free的记录写

2017/03/19学习笔记

继承中的同名成员变量处理方法 1.当子类成员变量和父类成员变量同名时2.子类依然从父类继承同名变量3.在子类中通过作用域分辨符::进行同名成员区分(在子类中使用父类的同名成员,显式地使用类名限定符)4.同名成员存储在内存中的不同位置 继承中的static关键字 继承和stataic关键字在一起会产生什么现象?1.父类定义的静态成员,将被子类所共享2.根据静态成员自身的访问特性和子类的继承方式,在类层次体系中具有不同的访问性质(遵守子类的访问控制)3.子类中访问静态成员,用以下形式:类名::成员或

2017/03/13学习笔记

cout<<标准输出cin>>标准输入定义一个类,是一个抽象概念,不会给你分配内存.用数据类型定义变量的时候,才会分配内存. C语言是在实践的过程中逐步完善起来的.没有深思熟虑的设计过程.使用时存在很多的"灰色地带"残留量过多低级语言的特征直接利用指针进行内存操作.C语言的目标是高效最终程序执行效率的高效C语言和C++并不是对立的竞争关系.C++ 是C语言的加强,是一种更好的C语言.C++ 是以C语言的为基础,并且完全兼容C语言的特性 C语言中无法取得regis

2017/03/09学习笔记

加密分为:对称加密和非对称加密对称加密:加密的秘钥和解密的密钥一样运算速度快,适合做大数据加密,强度弱eg :des 3des AES196 512....非对称加密:加密的密钥和解密的密钥不一样.运算速度慢适合做小数据加密,强度大 安全eg:rsa1024 2048 ECC椭圆曲线(SM系列)加密三要素:明文 密文 密钥 散列 哈希(指纹)(不可逆) 对称加密的原理:分组(按密钥长度分组,最后以加密 padding方式打补丁)

2017/03/08学习笔记

结构体深copy和浅copy问题 编译器的=号操作,只会把结构体中指针变量的值copy,但不会重新开辟内存空间.//出现浅copy出现的场景是,结构体里面有指针成员的时候.如果需要执行深copy,需要手动显示分配内存,然后手动copy指针成员所执行的数据. 结构体偏移量定义下来,则结构体中的成员 内存布局就定义下来了,可以通过成员地址去求结构体的内存地址 文件操作 文件的分类按文件的逻辑结构分为记录文件:由具有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成.按存储介