由上图能够知道,I/O操作的基类是ios_base,各个类的用途例如以下:

<iostream>
                     istream    从流中读取数据
                     ostream   向流中写数据
                     iostream  对流进行读写操作。派生于istream和ostream
<fstream>
                     ifstream    从文件里读取数据。派生于istream
                     ofstream   向文件里写数据,派生于ostream
                     fstream     读写文件, 派生于iostream
<sstream>
                     istringstream    读取string对象。派生于istream
                     ostringstream   写string对象。派生于ostream
                     stringstream     读写string对象,派生于iostream

iostream主要用于读写流的基本类型,fstream主要用于读写文件类型,sstream主要用于读写内存的string对象类型,如下图

C++ Primer 学习笔记:IO 类_ios

IO对象不能拷贝不能赋值;
IO操作的函数形参和返回值类型不能为流类型 ;
进行IO操作的函数常以引用方式传递和返回流,且不能为const;

这里要重点说明的就是sstream中的stringstream,这个实在是太好用了,用于数据类型转换,切割字符串等等是十分的好用。

例子如下:

基本数据类型转换例子 int转string

#include <string>
#include <sstream>
#include <iostream> 

int main()
{
    std::stringstream stream;
    std::string result;
    int i = 1000;
    stream << i; //将int输入流
    stream >> result; //从stream中抽取前面插入的int值
    std::cout << result << std::endl; // print the string "1000"
}

除了基本类型的转换,也支持char *的转换。

#include <sstream>
#include <iostream> 

int main()
{
    std::stringstream stream;
    char result[8] ;
    stream << 8888; //向stream中插入8888
    stream >> result; //抽取stream中的值到result
    std::cout << result << std::endl; // 屏幕显示 "8888"
}

再进行多次转换的时候,必须调用stringstream的成员函数clear().

#include <sstream>
#include <iostream>
int main()
{
    std::stringstream stream;
    int first, second;
    stream<< "456"; //插入字符串
    stream >> first; //转换成int
    std::cout << first << std::endl;
    stream.clear(); //在进行多次转换前,必须清除stream
    stream << true; //插入bool值
    stream >> second; //提取出int
    std::cout << second << std::endl;
}

按照空格分割字符串

#include<iostream>
#include<algorithm>
#include<sstream>
#include<string>

using namespace std;

int main()
{
    string line;
    while(getline(cin,line))
    {
        int sum=0;
        string x;
        stringstream ss(line);
        while(ss>>x)
            cout<<x<<endl;

    }
    return 0;
}