c++ primer 5th 笔记:第八章

第八章:IO库

  笔记

    1. c++语言不直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO。这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件、控制台窗口、内存等。

    2. getline函数,从一个给定的istream读取一行数据,存入一个给定的string对象中。如:

    string line;
    // 每次读入一整行,直至到达文件末尾
    while (getline(cin, line))
        cout << line << endl;

    3. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制实现的。

    4. IO对象无拷贝或赋值

    5. 使用流的good或fail函数是确定流总体状态的正确方法。

    6. 每个输出流都管理一个缓冲区,用来保存程序读写的数据。

    7. 有了缓冲机制,操作系统就可以将程序的多个输出操作组合单一的系统系写操作。由于设备的写操作可能很耗时,允许操作系统将多个输出操作组合为单一的设备写操作可以带来很大的性能提升。

    8. 默认情况下,cin和cerr都关联到cout,因此,读cin或写cerr都会导致cout的缓冲区被刷新。

    9. 进行open是否成功的检测通常是一个好习惯。

    10. 自动构造和析构:

    // 对于每个传递给程序的文件执行循环操作
    for (auto p = argv + 1; p != argv + argc; ++p)
    {
        ifstream input(*p);    // 创建输出流并打开文件
        if (input)
            process(input);
        else
            cerr << "couldn‘t open : " + string(*P);
    }    // 每个循环步input都会离开作用域,因此会被销毁
        // 因为input是while循环的局部变量,它在每个循环步中都要创建和销毁一次。
        // 当一个fstream对象离开其作用域时,与之关联的文件会自动关闭(调用close())。

    11. 以out模式打开文件会丢弃已有数据

    12. sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样。

    13. strm.str()  返回strm所保存的string的拷贝。

    14. 当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单个单词,通常可以使用istringstream。

  术语

    继承机制(inheritance)、条件状态(condition state)、文件模式(file mode)、文件流(file stream)

                                              2016-11-04 20:33:23

时间: 2024-10-27 00:45:45

c++ primer 5th 笔记:第八章的相关文章

c++ primer 5th 笔记:第十一章

第十一章:关联容器 笔记 1. 关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的.与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的. 2. 关联容器支持高效的关键字查找和访问,两个主要的关联容器类型是map和set.map中的元素是一些关键字-值对:关键字起到索引的作用,值则表示与索引相关联的数据.set中每个元素只包含一个关键字:set支持高效的关键字查询操作--检查一个给定关键字是否在set中. 3. 当从map中提取一个元素时,会得到一个pair

c++ primer 5th 笔记:第十章

第十章:泛型算法 笔记 1. 标准库并未给每个容器添加大量功能,而是提供了一组算法,这些算法(通用的)中的大多数都独立于任何特定的容器. 2. 大多数算法都定义在头文件algorithm中,另外在头文件numeric中定义了一组数值泛型算法. 3. 保证算法有足够的元素空间开容纳输出数据的方法是使用插入迭代器,back_inserter接受一个指向容器的引用,返回一个与该容器绑定的插入迭代器: vector<int> vec; // 空向量 auto it = back_inserter(ve

c++ primer 5th 笔记:第九章

第九章:顺序容器 笔记 1. 一个容器就是一些特定类型对象的集合.顺序容器(sequential container)为程序员提供了控制元素存储和访问顺序的能力. 2. 容器分为有序容器和无序容器:访问分为顺序访问和随机访问. 3. forward_list和array是新C++标准增加的类型.与内置数组相比,array是一种更安全.更容易使用的数组类型.与内置数组类似,array对象的大小是固定的. 4. 通常,使用vector是最好的选择,除非你有很好的理由选择其他容器. 5. 容器操作中类

c++ primer 5th 笔记:第五章

第五章:语句 笔记 1. 复合语句是指用花括号括起来语句和声明的序列,复合语句也被称作块(block).一个块就是一个作用域. 2. 定义在控制结构(if.switch.while.for)中的变量只在相应的语句内部可见,一旦语句结束,变量也就超出其作用范围了. 3. 对于悬垂else问题,c++规定,else与离它最近的尚未匹配的if匹配,从而消除了程序的二义性. 4. switch语句中,case标签必须是整型常量表达式,且任何两个case标签的值不能相同. 5. c++语言规定,不允许跨过

c++ primer 5th 笔记:第七章

第七章 笔记 1. 定义在类内部的函数是隐式的inline函数. 2. 使用const的成员函数被称作常量成员函数(const member function). 3. 首先编译成员的声明,然后才轮到成员函数体.因此,成员函数体可以随意使用类中的其他成员而无须在意这些成员出现的次序. 4. IO类属于不能被拷贝的类型,因此只能通过引用来传递它们. 5. 每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程.这些函数叫做构造函数. 6. 默认构造函数无须

c++ primer 5th 笔记:第六章

第六章 笔记 1. 通过调用运算符(call operator)来执行函数.调用运算符的形式是一对圆括号,它作用于一个表达式,该表达式是一个函数或指向函数的指针. 2. 在c++语言中,名字有作用域,对象有生命周期. a. 名字的作用域是程序文本的一部分,名字在其中可见. b. 对象的生命周期是程序执行过程中该对象存在的一段时间. 3. 函数体是一个语句块,块构成一个新的作用域. 4. 形参和函数体内部定义的变量统称为局部变量(local variable). 5. 局部静态对象(local s

C++ Primer 学习笔记_98_特殊工具与技术 --优化内存分配

特殊工具与技术 --优化内存分配 引言: C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类型对象. new基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用用户级的类类型对象分配能够更快一些.这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每个新对象. 另外一些类希望按最小尺寸为自己的数据成员分配需要的内存.例如,

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g