您的位置:首页 > 编程语言 > C语言/C++

C++中的“流”和fstream类的一点总结

2016-08-04 01:07 288 查看
感觉书里面对流的介绍非常的玄学,今天上网查了一下,做个笔记

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间。所谓output的意思可以理解为内存输出数据到其他设备

(例如硬盘或者显示器),而input可以理解为其他设备输出数据到内存。stream(流)就是这个数据交换的过程。在输入和输出的过程中,因

为不同设备之间有很大的速度差异,因此肯定要建立buffer(缓冲区),buffer是一块内存。

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:

  1、插入器(<<)

  向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<”Write Stdout”<<’\n’;就表示把字符串”Write Stdout”和换行字符(‘\n’)输出到标准输出流。

  2、析取器(>>)

  从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

  iostream类有一个子类叫fstream,是用来处理文件对象的(file-stream)。下面介绍一点fstream类的用法。仅仅把我最近用到的记下来,慢慢更新,不会面面俱到!

std::getline()函数

下面是std::getline()的声明,存在于string.h中。

istream& getline ( istream& is, string& str, char delim );
istream& getline ( istream& is, string& str );


从上面的声明可以看到,getline()返回值是isteam&,有三个参数。

第一个参数 istream& is 是一个输入流,将该输入流中的第一行数据输入第二个参数 string& str 中。第三个参数是换行标识符,默认是回车。你也可以通过显式输入第三个参数,来重载换行符。

•功能:

–从输入流中读入字符,存到string变量

–直到出现以下情况为止:

•读入了文件结束标志

•读到一个新行

•达到字符串的最大长度

–如果getline没有读入字符,将返回false,可用于判断文件是否结束

下面是一个getline()的小例子

//读取某个文本文档,用getline()把文档中的每一行读取下来并加入一个vector,把vector中的元素逐个输出
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
int _tmain(int argc, _TCHAR* argv[])
{
vector<string> words;
string word;
ifstream input("c:\\1.txt"); //文档的内容和路径自己随便弄一个
while(!input.eof()){         //eof(),iostream类的成员函数,判断当前流是否到文件末尾
getline(input,word);     //把getline()放在while中也可以。什么也没读入的时候,它返回false。
words.push_back(word);
cout << word << endl;
cout << "test 1" << endl;
if(input.failbit != 0)   //读取到文件末尾时,failbit值不为0
{cout << "test" << endl;}
}
for(auto i = words.begin();i != words.end();++i)
{
cout << *i << endl;
}
input.close();
system ("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++-流