1. 标准库支持wchar_t类型的IO类,在每个类前加“w”前缀即可。文件流的头文件为fstream。string流的头文件为sstream。
2. IO对象不能复制和赋值,因为只有支持复制的元素类型才能存储在vector容器和其他容器中,故流对象不能存储在vector和其他容器中。流对象也不能作为函数形参和返回类型。如果要传递和返回IO对象,只能返回指向对象的引用或者指针。
3. IO标准库管理一系列的条件状态,用来标记给定的IO对象是否处于可用状态。
4. 流必须处于无错误状态,才可以用于输入或者输出。检查流是否可用的最简单方法是检查它的真值:
if(cin)
while(cin>>word)
IO标准库的条件状态:
strm::iostate 由各个iostream 类定义,用于定义条件状态
strm::badbit strm::iostate类型的值,用于指出被破坏的流
strm::failbit strm::iostate类型的值,用于指出失败的IO操作
strm::eofbit strm::iostate类型的值,用于指出流已经到达文件的结束符
s.eof() 如果设置了流s的eofbit值,该函数返回true
s.bad() 如果设置了流s的badbit值,该函数返回true
s.fail() 如果设置了流s的failbit值,该函数返回true
s.good() 如果流s处于有效状态,该函数返回true
s.clear() 清空流s的所有状态,并设为true
s.clear(flag) 给流s的某个条件状态位设置为true。flag,类型是strm::iostate
s.setstate(flag) 给流s的添加指定条件。flag,类型是strm::iostate
s.rdstate() 返回流s的当前条件,返回值类型是strm::iostate
注意:s.setstate(flag)是给流s的添加指定条件,会保留已存在的状态。
当输入文件结束符(eof),cin会进入错误状态。
文件流的状态必须及时清除.以ifstream in为例,当in.close()后,in中的失败状态不被清空,因此必须显示地调用函数,清空错误状态。
5. 输出缓冲区的管理
用操纵符显示的地刷新,如endl,flush,ends.
每次输出操作执行完成后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区
将输出流与输入流关联(tie)起来,此时,在读输入流时将刷新其关联的输出缓冲区。
tie函数可用istream和ostream对象调用,使用一个指向ostream对象的指针形参调用tie函数时,将实参流绑定在调用该函数的对象上。如果一个流调用tie函数将其本身绑在传递给tie函数的ostream的实参对象上,该流上的任何IO操作都会刷新实参所关联的缓冲器。
如果将0做实参,则取消绑定。
6. 如果把fstream对象与另一个文件关联,则必须先关闭现在的文件,然后打开另一个文件。文件名必须是C风格的字符串。
7. 文件打开的模式.
in 打开文件做读操作.
out 打开文件做写操作.
app 在每次写之前找到文件尾.
ate 打开文件后立即将文件定位到文件尾.
trunc 打开文件时清空已经存在的文件流.
binary 以二进制模式进行IO操作.
out,trunc和app模式只能用于指定与ofstream或fstream对象关联的文件;in模式只能用与指定ifstream或fstream对象关联的文件.
所有的文件都可以用ate和binary模式. ate只在打开时有效。
对于用ofstream打开的文件,要保存文件中已经存在的数据,唯一的方法是显式的指定以app的模式打开.
8. 打开文件模式的有效组合.
out 打开文件做写操作,删除文件中已有的数据.
out | app 打开文件做添加操作,在结尾添加.
out | trunc 与out相同.
in 打开文件做读操作.
in | out 打开文件做读写操作,并定位于文件开始处,不清空。 fstream默认的打开方式。
in | out | trunc 打开文件做读写操作,删除文件中已有的数据.
上述所有打开模式组合还可以添加ate模式,对这些模式添加ate只会改变文件打开时的初始定位,定位于文件结尾处。如果指定trunc模式,则文件总会清空。
ofstream outfile("file1");
ofstream outfile2("file1", ofstream::out | ofstream::trunc);
ofstream appfile("file2", fostream::app);
模式是文件的属性而不是流的属性。
9. 字符串流的特定操作,定义在sstream头文件中.每个stringstream对象都有一个string类型的对象成员。这些类还定义了名为str的成员,用来读取或设置stringstream对象所操作的string对象成员。
stringstream strm; 创建自由的stringstream对象.
stringstream strm(s); 创建存储s的副本的stringstream对象.s是string对象.
strm.str(); 返回strm中string类型的对象.
strm.str(s); 将string类型的s复制给strm,返回void.
10. stringstream的使用:
可以用来处理每行的每个单词。
string line,word;
while(getline(cin,line)){ // 使用getline获取整行内容.
istringstream stream(line); // 将line绑定到一个istringstream对象上.
while(stream>>word){ // 将line中的每个字输入到word中. >>遇到空白符将结束输入。
// ...
}
}
在需要多种数据类型之间实现数据类型之间实现自动格式化时使用该类类型。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
int val1 = 512, val2 = 1024;
ostringstream format_str;
string dump; // 为了屏蔽字符串中无用的标号.
// 将数字转换为对应的打印字符串.
format_str << "val1: " << val1 << "\n" << "val2: " << val2 << "\n";
//这时format_message的关联string对象的内容是如下字符 val1: 512\nval2: 1024\n
// 转化为istringstream对象,读出字符串中的数据.
istringstream input_str(format_str.str());
input_str >> dump >> val1 >> dump >> val2;
cout<< val1 << " " << val2 << endl; //输出512 1024
getchar();
return 0;
}
一般情况下,使用输入操作符读string对象时,空白符将会忽略。于是,在读与format_message关联的string时,忽略其中的换行符。
分享到:
相关推荐
C++标准IO库,通过C++标准输入输出流对控制窗口,磁盘文件字符串流进行控制。内容也包含条件状态,文件模式等内容。
### C++标准IO知识点详解 #### 一、C++标准IO概述 C++标准库提供了丰富的输入输出(IO)功能,这些功能通过一系列面向对象的API实现,支持对各种设备如控制台、文件等的读写操作。这些API还包括一些特殊类型,允许...
C++标准IO库是C++编程中用于处理输入输出的重要组成部分,主要由`iostream`、`fstream`等头文件提供支持。在这个实例中,我们将详细探讨C++如何使用标准IO库进行不同类型的文件操作。 首先,`iostream`头文件包含了...
本文档基于《C++ Primer》中的IO库章节,重点介绍C++标准库中与输入输出相关的概念和技术。主要内容包括不同IO操作之间一致性的实现方式、基本的IO对象管理以及文件输入输出的基本操作。 #### 二、IO操作的一致性 ...
### C++ IO流库知识点详解 #### 一、C++为何需要自己的IO系统?...通过这样的设计,C++的IO流库不仅能够很好地支持标准的输入输出操作,还能方便地扩展以支持各种自定义类型的数据处理,满足复杂应用的需求。
C++标准程序库是C++编程语言不可或缺的一部分,它提供了大量的类和函数,极大地扩展了C++的基础功能。源代码的获取和理解对于深入学习C++、优化代码以及进行库的自定义修改至关重要。这份“c++ 标准程序库 源代码”...
再者,C++标准库提供了IO流系统,使输入输出操作变得简洁而直观。iostream库包含了cin、cout等对象,使得从键盘读取数据和向屏幕输出结果变得简单易行。同时,fstream库支持文件的读写操作,方便数据持久化。 此外...
C++标准库则更加丰富,除了包含C库的所有内容外,还增加了STL(Standard Template Library)组件,如容器(如vector、list、set、map)、迭代器、算法(如sort、find、transform)以及IO流库(iostream)。...
在C++编程中,I/O流库是处理输入和输出操作的核心部分,它使得程序员能够高效、方便地与外部设备(如键盘、显示器、磁盘文件等)进行数据交互。本章将详细介绍C++的I/O流库及其相关概念。 1. **屏幕输出** - **...
在编程领域,标准IO库(Standard Input/Output Library)是C++编程语言中不可或缺的一部分,它为处理输入和输出提供了一套完整的接口。QT库,另一方面,是一个强大的跨平台应用程序开发框架,尤其在图形用户界面...
C++标准库是C++编程语言的核心组成部分,它提供了一系列预先定义好的类和函数,用于高效、便捷地实现各种常见的编程任务。这个压缩包包含了C++标准库的源代码,对于学习者来说,是一个深入了解C++内部机制和编程实践...
C++的IO流库是C++标准库的重要组成部分,它为程序提供了处理输入和输出的强大工具。在C++中,IO流库(I/O Stream Library)使得数据的读写变得非常方便,支持从键盘、文件、网络等不同来源进行数据交互。这个教程...
此外,C++标准库还有iostream库,用于IO操作,如cin和cout;异常处理(exception)、智能指针(shared_ptr, unique_ptr)等,这些都是C++语言的重要组成部分。 C++标准库中的`<iostream>`头文件提供了基本的输入...
C++标准库是C++编程语言的核心组成部分,它提供了一系列预先定义好的函数、类和对象,使得程序员可以高效地编写程序而无需从零开始构建所有基础功能。C++标准库通常被称为C++ Standard Template Library (STL),但...
C++标准IO库提供了一套丰富的输入输出操作,支持多种数据类型的读写。 C++标准库提供了多种容器,如顺序容器(vector、list等)和关联容器(set、map等),用于存储数据。容器类模板提供了迭代器支持,用于顺序访问...
《C++标准程序库:自修教程与参考手册》是一本专门为有C++基础的编程人员设计的深度学习资源。这本书全面介绍了C++标准程序库,涵盖了从基本概念到高级特性的广泛内容,旨在帮助读者深入理解并熟练运用C++标准程序库...
C++的IO流是C++标准库中的一个重要组成部分,它为程序与外部设备(如键盘、屏幕、文件等)之间的数据交换提供了强大的支持。IO流是C++对C语言I/O系统的一种扩展和改进,引入了面向对象的概念,使得输入输出操作更加...
C++程序设计与数据结构基础:第8章 C++ IO流标准库 本章内容主要讲解了C++程序设计中的IO流标准库,涵盖了C++ I/O流概述、控制台与文件的输入与输出、外部存储介质、内存变量写文件(输出)读文件(输入)等方面的...
《C++标准程序库》是一本深入探讨C++标准库的权威著作,由著名C++专家Jerrold E. Mangione和Nicolai M. Josuttis合著,并由侯捷先生进行了中文翻译。这本书详细介绍了C++语言的核心库,包括STL(Standard Template ...
C++标准程序库是C++编程语言不可或缺的一部分,它为开发者提供了丰富的功能和工具,使得编写高效、可维护的代码变得更加便捷。C++标准库,也称为C++ Standard Template Library (STL),由多个组件组成,包括容器、...