C++基础::Stream

原创 2015年11月18日 22:22:04

标准I/O库类继承体系


io

对应关系:

  • istream,ifstream,istringstream
  • ostream,ofstream,ostringstream
  • iostream,fstream,stringstream

从上图我们可以看到,stringstream兼具istringstream(从字符串流中读数据)ostringstream(向字符串流中写数据)的功能(它们三者的头文件均位于<sstream>),既然如此我们是不是在任何istringstreamostringstream出现的地方替换为stringstream(任何istreamostream出现的地方替换为iostream,三者的头文件均位于<iostream)呢。然而事实上并没有这么做。

既从一个字符串中读又从中写数据是一件古怪(且很少发生)的行为1

std::stringstream ss;
ss << "hello world ";
                        // world 后要有至少有一个空格,
ss << 42;
std::string str1, str2; int i;
                // 流以空格为分割,且忽略冗余空格
ss >> str1 >> str2 >> i;
std::cout << str1 << str2 << str3 << std::endl;

流的好处

流的好处在于无论何种基本数据类型都可丢到流中,且很方便再重新取出赋值,这是字符串类型所做不到的。

#include <stdlib.h>
                        // _itoa
                        // 进行windows平台下的编译器
std::stringstream ss;
ss << "hello world " << 42;
std::string str1, str2; int i;
ss >> str1 >> str2 >> i;

std::string s;
int i = 42;
s += "hello world ";
char arr[5];
_itoa(i, arr, 10);
s += arr;
                                // 较为啰嗦和复杂

good()

判断文件打开是否成功:

std::ofstream ofs("./1.txt");
assert(ofs.good());
        // 文件打开成功时,good()返回值为true
        // 否则为false

返回值类型

C++ 中的 string 类型定义:

typedef basic_string<char, char_traits<char>, allocator<char> >
    string;
  • 对 string 类型的 s 而言,s.c_str():string ==》 char*

  • 对流类型的 s 而言,s.str():stream ==》 string

References

[1] <C++标准I/O库:iostream, fstream, sstringstream>

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++标准I/O库:iostream, fstream, sstringstream

在写代码的过程中,我们最常做的事就是io,无论
  • anonymalias
  • anonymalias
  • 2014年06月09日 21:29
  • 4036

C++ Stream I/O

C++ Stream I/OStream Input/OutputStream I/O ApplicationsStream Output ConceptStream Input ConceptUsi...
  • Augusdi
  • Augusdi
  • 2011年12月12日 10:11
  • 2937

使用c++ 的stream遇到的问题

c++的stream系列类是c++复杂性的一个体现点。总体来讲,复杂性安全性超过c,但速度低于c。      我是由于处理的数据量小,但数据形式不固定,而c++的stream有助于格式检查,所以使用了...
  • LaineGates
  • LaineGates
  • 2015年01月20日 21:40
  • 915

C++基础::Stream(二)

C++基础::Stream std::endl vs ‘\n’1 The only difference is that std::endl flushes the output buffer, ...
  • lanchunhui
  • lanchunhui
  • 2016年02月24日 14:41
  • 409

C++ 流(stream)总结

C++中流的操作总结
  • luguifang2011
  • luguifang2011
  • 2014年11月10日 17:22
  • 5584

C++中的I/O stream类

ios_base:顶层基类 basic_ios template > class basic_ios :public class ios_base {}; basic_istream:两者虚...
  • liu1064782986
  • liu1064782986
  • 2012年03月05日 19:03
  • 1747

C++ stream格式化输出输入

本文摘自C++primer第四版附录A3 A.3.3. 控制输出格式 许多操纵符使我们能够改变输出的外观。有两大类的输出控制:控制数值的表示,以及控制填充符的数量和布局。 控制布尔值和格式 改...
  • kamaliang
  • kamaliang
  • 2011年09月02日 16:20
  • 3049

C++stream

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(  向流输出数据。比如说系统有一个默认的标准输...
  • yfw418
  • yfw418
  • 2007年06月14日 19:27
  • 1026

c++ stringstream 简单用法

来自:http://blog.csdn.net/zaishaoyi/article/details/46682033stringstreamstringstream 是 C++ 提供的另一个字串型的串...
  • lgfun
  • lgfun
  • 2016年07月19日 22:39
  • 591

C++ stream总结

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(   向流输出数据。比如说系统有一个...
  • henreash
  • henreash
  • 2012年05月04日 10:04
  • 11418
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++基础::Stream
举报原因:
原因补充:

(最多只允许输入30个字)