第八章 IO库
1. IO类:ifstream 和istringstream都继承自istream。普通流,文件流和string流。
2.IO对象不可拷贝或赋值。只能通过引用的方式来使用,且不能加const,因为读写会改变其状态。
3.刷新和写操作是两个过程,一般系统讲多个输出组合成单一的写操作。操作符endl,flush和ends可以实现刷新缓冲区,但各有不同。unitbuf和nonunitbuf了解。
4.当一个fstream对象被销毁时,close会被自动调用。
5. out模式打开文件会丢弃已有数据,除非再制定app模式。
6、istringstream应用场景:对整行文本进行处理,然后需要处理行内单个单词。ostringstream则是相反。
第九章 顺序容器
1. 现代C++程序应该使用标准库容器,效率更高。通常选vector是很好的选择。
2.容器均为模板类型,需呀额外提供元素类型信息生成特定的容器类型。
3.当不需要写访问时,应该使用cbegin和cend。
4.array具有固定大小,定义时,除了类型,还要制定大小。array<int, 42>.默认构造的array是非空的。
5.array可以进行拷贝和赋值。内置数组不行。array不能使用assign操作。
6.除了array外,swap不会对元素进行拷贝,删除等操作,可以很快完成,也不会使迭代器等失效。
7.容器元素是拷贝。
8. vector不支持push_front,但是可以插入到begin()之前,insert。
9.insert返回插入的新元素的迭代器。
10.新标准提出emplace,emplace_back和emplace_front,是直接把参数传给类型的构造函数,不是像push_back那样拷贝。
11.容器首位元素,front()和back();
12.at成员函数会检查下标越界;
13.删除元素后,返回的迭代器指向我们要删除的最后一个元素之后一个位置。
14.forward_list添加后删除元素比较特殊,insert_list, erase_after,关注前驱和当前迭代器。
15.resize改变容器大小。
16.容器添加或删除元素,迭代器失效的情况。
17.若在一个循环中插入删除容器里的元素,不要缓存end返回的迭代器,因为它会失效。
18.vector并不是每次添加新元素都会重新分配内存空间,这样会很慢;而是每次分配空间时,会分配比需求空间更大的内存空间备用。
19.理解vector的size和capacity的区别。容器大小管理操作:capacaity()和reverse();
20.从const char* 创建string时,数组必须以空字符结尾。若还传递给构造函数一个技术值,数组就不必以空字符结尾。否则构造函数行为未定义。
21.string的插入和删除除了用迭代器之外,还可以用下标。replace是对erase和insert的一种简写形式。
22.string搜索返回的是unsigned类型,因此用int或别的有符号保存不好。如果搜不到,返回string::npos.
23.rfind反向搜索。
24.compare函数,比较string大小。
25.数值转换:to_string,stoi, stod。
26.容器适配器,是一种机制,使已有的容器表现的 像另一种不同的类型。
27.stack适配器只要求右push_back,pop_back和back的操作。priority_queue除了front,push_back和pop_back操作外,还要有随机访问的能力。
28.stack底层是deque实现,但不能直接用deque的操作。queue默认给予deque实现,priority_queue基于vector实现。