c++11学习笔记(4)
(1)iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。
(2)继承机制使我们可以声明一个特定的类继承自另一个类,我们通常可以将一个派生类当做其基类对象来使用。
(3)代码通常在使用一个流之前检查它是否处于良好状态,确定一个流对象的状态的最简单的方法就是将它当做一个条件使用:
while(cin >> word)
(4)io库定义了一个和机器无关的iostate类型,它提供了表达流状态的完整功能,这个类型应作为一个位集合来使用。io库定义了4个iostate类型的constexpr值,表示特定的位模式。这些值用来表示特定类型的io条件,可以和位运算符一起使用来一次性检测或设置多个标志位。badbit/faibit/eofbit/goodbit
(5)管理条件状态:流对象的rdstate成员返回一个iostate数值,对应流的当前状态。setstate操作将给定条件位置位,表示发生了对应错误。clear成员是一个重载的成员,他有一个不接受参数的版本,而另一个版本接受一个iostate类型的参数。
(6)当一个输入流被关联到一个输出流的时候,任何试图从输入流读取数据的操作都会先刷新关联的输出流。tie有两个重载的版本,第一个版本不带参数,返回指向输出流的指针,如果本对象当前关联到一个输出流,则返回的就是指向这个流的指针,如果对象未关联到流,则返回空指针。tie的第二个版本接受一个指向ostream的指针,将自己关联到此ostream。
(7)我觉得c++的文件处理太麻烦了,实在是需要的话就用python写个脚本吧。
(8)类fstream和stringstream都是继承自类iostream的。输入类都继承自istream,输出类都继承自ostream。因此,可以在istream对象上执行的操作,也可以在ifstream或isstringstream对象上执行。继承自ostream的输出类型也有类似情况。
(9)下面列举的这些容器在以下方面都有不同的性能折中。
vector是可变大小数组,支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢。
deque是双端队列,支持快速随机访问,在头围位置插入或删除的速度很快。
list是双向链表,只支持双向顺序访问,在list中任何位置进行插入/删除操作速度都很快。
forward_list是单向链表,只支持单向顺序访问,在链表任何位置进行插入/删除操作速度都很快。
array是固定大小数组,支持快速随机访问,不能随机添加或删除元素。
string是和vector相似的容器,但专门用来保存字符。随机访问快,在尾部插入/删除速度快。
(10)除了固定大小的array之外,其他容器都提供高效、灵活的内存管理。我们可以添加和删除元素,扩张和收缩容器的大小。容器保存元素的策略对容器操作的效率有些固有的影响。
(11)string和vector将元素保存到连续的内存空间中,由于元素是连续存储的,由元素的下标来计算其地址是非常快速的。但是,在这两种容器的中间位置添加或删除元素就会非常耗时,在第一次插入或删除操作之后,需要移动插入/删除位置之后的所有元素,来保存连续存储。而且,添加一个元素有时可能还需要分配额外的存储空间,在这种情况下,每个元素都必须移动到新的存储空间中。
(12)list和forward_list两个容器的设计目的是令容器任何位置的添加和删除操作都很快速。作为代价,这两个元素不支持元素的随机访问,为了访问一个元素,我们只能遍历整个容器。而且,和vector/deque/array相比,这两个容器的额外内存开销也很大。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下