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>

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

相关文章推荐

java基础---Stream

------http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 学习笔记 -  I...

Oracle Stream(基础)

Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Node.js Stream - 基础篇

背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分。这些部分的接口遵循一定的规范,通过某种方式相连,以共同完成较复杂的任务。譬如,shell通过管道|连接各部分,其输入输出的规范是文本...

StreamAPI基础知识

Stream是支持顺序或并行聚合操作的数据元素序列。 特点: 无存储(数据都是来自数据源) 可表示无限元素(集合都是有限元素) 内部迭代 支持并行处理 支持函数式编程 支持有序或无序 Stre...

Exercice_7.31-练习创建类的成员函数

这里我要创造一个Sales_item类,用来保存每次销售jilu

C#基础学习需要注意的几个知识点

在学习Unity之前,相信我们都要经历C#编程语言的学习,大家都知道在C#是一门面向对象的编程语言,具有封装继承多态的一些特点,这些知识点浅学并不难,但是当我们在Unity的道路上越走越远的时候,我们...

WPF--常见属性Label的隐藏和显示

主要运用Visibility和布局 前台代码 ...

C++基础复习·二

C++基础, C++较C增强

C++ 11 新特性之 auto

auto是C++ 11 的另一个新特性,其实大家可以之前就见过这个关键字,Java也有这个保留字

C/C++基础(二)

指针和地址
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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