C++ primer 学习笔记(五)

第八章 标准IO库

1. iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于读写存储在内存中的string对象;

2.如果函数有基类类型的引用形参时,可以给传递其派生类型的对象;

3.只有支持赋值的元素类型可以存储在vector或其他容器类型里,因此不存在存储流对象的vector或其他容器;

4.形参或返回类型也不能为流类型。如果需要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用;

5. 为了确保用户看到程序实际上处理的所有输出,最好的方法是保证所有的输出操作都显式地调用了flush或endl;

6. 当输入流和输出流绑定在一起时,任何读输入流的尝试都将首先刷新其输出流关联的缓冲区;

文件调用open函数时必须设置文件模式,设置可以使显示或者隐式,如果没有指明则使用默认值out模式打开,清空文件中的已经存在的内容。

 

打开文件的有效模式组合:

7.如果在调用tie函数时传递实参0,则打破该流上已存在的捆绑;

8.关闭流并不能改变流对象的内部状态;

 

 

 

 

 

 

第二部分容器和算法

 

第九章 顺序容器

1.顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定;

2.将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同;

复制容器对象的构造函数方法和使用一对迭代器的构造函数的的差异,前者要求容器类型和容器元素类型相同,后者没有。

3.容器元素类型必须满足以下两个约束:

元素类型必须支持赋值运算;

元素类型的对象必须可以复制。

4.除了引用类型外,所有内置或复合类型都可用做元素类型;

5.IO库类型不支持复制和赋值,因此不能创建存放IO类型对象的容器;

6.定义元素是容器的容器时,必须用空格隔开两个相邻的>符号,以示这是两个分开的符号,否则,系统会认为>>是单个符号,为右移操作符,并结果导致编译时错误;

example:vector< vector<string> > lines;

 

  1. = = 和!=这两种关系运算适用所有容器;

 

8.关系操作符只适用于vector和deque的容器,这是因为只有这两种容器元素提供快速、随机的访问。它们确保可根据元素位置直接有效地访问指定容器元素;

9.C++语言使用一对迭代器标记迭代器范围,这两个迭代器分别指向同一个容器中的两个元素或超出末端的下一位置;

 

  1. 所有顺序容器都支持push_back操作,提供在容器尾部插入一个元素的功能;

 

  1. 为了避免存储end迭代器,可以在每次做完插入运算后重新计算end迭代器;

添加或者删除deque和vector容器内的元素,会导致之前储存的迭代器失效

  1. 比较的容器必须具有相同的容器类型,而且其元素类型也必须相同;容器比较是基于容器内元素的比较;

如果两个容器具有相同的长度而且所有元素对应相同,则这两个容器相等;如果长度不相等,较短的容器中的元素对应较长的容器对应的元素,则称之为短的小于长的容器;如果两个容器是内容不同,则比较结果取决于第一个不相等的元素。

 

用迭代器在删除元素时候,保证迭代器指向不是最后一个元素之后的位置,否则会导致行为未定义,发生错误

 

13.C++语言只允许两个容器做其元素类型定义的关系运算;

14.对于所有的容器类型,如果resize操作压缩了容器,则指向已删除的元素的迭代器失效;

15.寻找一个指定元素的最简单方法是使用标准库的find算法;

16.erase、pop_front和pop_back函数通常使指向被删除元素的所有迭代器失效。对于vector容器,指向删除点后面的元素的迭代器通常也会失效。而对于deque容器,如果删除时不包含第一个元素和最后一个元素,那么读deque容器相关的所有迭代器都会失效;

 

17.swap操作则不会使迭代器失效。完成swap操作后,尽管被交换的元素已经存放在另一容器中,但迭代器仍然指向相同的元素;

18.要交换的容器的类型必须匹配:操作数必须是相同类型的容器,而且所储存的元素类型也必须相同;

19.对于大部分应用,使用vector容器时最好的,原因在于,标准库的实现者使用这样的内存分配策略:以最小的代价连续存储元素,由此而带来的访问元素的便利弥补了其存储代价;

20.每当vector容器不得不分配新的存储空间时,以加倍当前容量的分配策略实现重新分配;

Size()函数返回的是现在的容器大小,capacity()函数返回的下次达到重新分配时容器中存在的元素数目,reserve()函数实现程序员与容器内存分配实现的交互,可以设置预留的内存空间大小。

string类型不支持以栈方式操纵容器;string类型共享容器的操作;

 

22.无论要求赋值多少个字符,标准库最多只能复制数目与string对象长度相等的字符;

23. stack适配器可以建立在vector、list或者deque容器之上,queue适配器只能建立在list容器上,priority_queue适配器只能建立在vector或deque容器上;

容器类具体图表过多,请查看书本。

猜你喜欢

转载自blog.csdn.net/qq_34935373/article/details/90700500
今日推荐