IO库的组成

三种流

C++的IO库以流对象为实体。主要有三种流:

(1)标准输入输出流

(2)文件输入输出流

(3)字符串输入输出流

流迭代器

输入输出流迭代器

instream_iterator<type>

ostream_iterator<type>

从控制台到容器

istream_iterator<T> first(cin);

istream_iterator<T> last;

copy(first,last,back_inserter(v));//调用容器的push_back方法

vector<string> vs(first,last);

从容器到控制台

ostream_iterator<T> first(cout," ");

copy(v.begin(),v.end(),first);

从文件到容器

ifstream fin("inputfile.txt");

istream_iterator<T> first(fin),last;

vector<T> v(first,last);

从文件到string

ifstream fin("inputfile.txt");

//以下再读取字符的时候文件里的空白字符也会放到string中

istreambuf_iterator<char> first(fin),last;//注意与上面一段的差别

string v(first,last);

//假设使用istream_iterator<char> first(fin),last;则会从文件里用

//>>操作符读取char变量放到string中,空白符丢失

从容器到文件

ofstream fout("outputfile.txt");

ostream_iterator<T> first(fout," ");//注意这里不须要last

copy(v.begin(),v.end(),first);

流对象的状态

s.eof()        //流结束状态,输入流中已经读全然部数据。再读一次就会是eof为true

s.fail()        //变量转换失败clear(ios::failbit)

s.bad()         //

s.clear()       //全部状态重置为有效

容器都有自己的迭代器

容器

vector 

string 

deque 

list

v.begin()      v.end()

l.cbegin()    l.cend()

流的迭代器

流迭代器用来写入流,或者从读流对象读数据,输入流迭代器使用strm>>t操作,将数据写到变量中。你看看>>操作符像不像箭头,这个箭头代表了数据的流向,C++作者说的。呵呵。

相同输出流使用<<操作符,将变量的数据写到流中。

输入流迭代器                                                                                     输出流迭代器

istream_iterator<T> iter_begin(strm),iter_end;                          ostream_iterator<T> iter_begin(strm),iter_end;/

以变量为单位。空白符将会被吃掉                                        以变量为单位,空白符将会被吃掉

istreambuf_iterator<char> iter_begin(strm),iter_end;           ostreambuf_iterator<char> iter_begin(strm),iter_end;

以字符为单位,空白符将会依照一个单位处理                以字符为单位,空白符将会依照一个单位处理

字符流迭代器演示样例

#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
#include <algorithm>
using namespace std; int main(int , char**)
{
std::string str("a b c 123 !");
cout<<str<<endl; stringstream ss(str);
istreambuf_iterator<char> itrBegin(ss),itrEnd;
copy(itrBegin, itrEnd, ostream_iterator<char>(cout)); return 0; }

C++打印main.cpp源码

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std; int main(int argv, char** argc)
{
ifstream fin("main.cpp");
//buf迭代器会得到空白字符
istreambuf_iterator<char> itrFile(fin), endFile;
//输出迭代器只迭代一个char就可以,不须要是buf迭代器
ostream_iterator<char> itrCout(cout);
copy(itrFile, endFile, itrCout);
return 0;
}

C++打印main.cpp源码

(先放到字符串中,再打印字符串)

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std; int main(int argv, char** argc)
{
ifstream fin("main.cpp");
string str;
istreambuf_iterator<char> itrFileBegin(fin), itrFileEnd;
copy(itrFileBegin, itrFileEnd, back_inserter(str));//把源文件内的代码(包含字符和空格)放到字符串中
//仅仅有遇到'\0'才会结束,而源文件里的空格字符(' '相应的数值为32)
//,回车字符,Tab字符相应的值都不是'\0',所以都能被打印出来
cout<<str.c_str()<<endl;
return 0;
}




数据的流动

copy(iter_from_begin,iter_from_end,iter_dest_begin);

<iterator>                                                                                            <iterator>

inserter(strm)             //v.insert                                             istream_iterator<T> iter_begin(strm),iter_end;

back_inserter(strm)  //v.push_back                                  istreambuf_iterator<char> iter_begin(strm),iter_end;

front_inserter(strm)  //v.push_front

<------------------------------------------------------        数据             < ---------------------------------------------------

容器                                                                                                                                                                               流对象

vector                                                                                                                                                                                    fstream

string                                                                                                                                                                           sstream

list     deque                                                                                                                                                                        cin  cout

---------------------------------------------------------->         数据           ---------------------------------------------------->

v.begin()      v.end()                                          ostream_iterator<T> iter_begin(strm),iter_end;/

l.cbegin()    l.cend()                                         ostreambuf_iterator<char> iter_begin(strm),iter_end;

copy(iter_from_begin,iter_from_end,iter_dest_begin);

演示样例:

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std; int main(int argc, char *argv[])
{
int temp_int[5] = {1,2,3,4,5};
vector<int> vector_int;
//array to vector
copy(temp_int,temp_int+sizeof(temp_int)/sizeof(int),back_inserter(vector_int));
//vector to cout
copy(vector_int.begin(),vector_int.end(),ostream_iterator<int>(cout," "));
cout<<endl;
//vector to stringstream
stringstream strm;
copy(vector_int.begin(),vector_int.end(),ostream_iterator<int>(strm," "));
cout<<strm.str()<<endl;
//stringstream to vector<string>
vector<string> vector_string;
copy(istream_iterator<string>(strm),istream_iterator<string>(),back_inserter(vector_string));
copy(vector_string.begin(),vector_string.end(),ostream_iterator<string>(cout," "));
cout<<endl; return 0;
}

输出例如以下:

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

请按随意键继续. . .

标准C++ I/O库 迭代器让数据自由流动 V8的更多相关文章

  1. c/c++ 标准库 迭代器(iterator)

    c/c++ 标准库 迭代器 begin和end运算符返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator:如果对象不是常量,返回iteraotor 1 ...

  2. WebGIS中基于控制点库进行SHP数据坐标转换的一种查询优化策略

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 目前项目中基于控制点库进行SHP数据的坐标转换,流程大致为:遍 ...

  3. Libscore – 收集 JavaScript 库的使用数据

    Libscore 扫描网络上成千上万的网站,收集统计 JavaScript 库的使用数据.在搜索框中,输入关键词,例如 jQuery, Modernizr, $.ui 或者 $.fn.fancybox ...

  4. SQL Server跨库复制表数据错误的解决办法

    SQL Server跨库复制表数据的解决办法   跨库复制表数据,有很多种方法,最常见的是写程序来批量导入数据了,但是这种方法并不是最优方法,今天就用到了一个很犀利的方法,可以完美在 Sql Serv ...

  5. 项目中通过Sorlj获取索引库中的数据

    在开发项目中通过使用Solr所提供的Solrj(java客户端)获取索引库中的数据,这才是真正对项目起实质性作用的功能,提升平台的检索性能及检索结果的精确性 第一步,引入相关依赖的jar包 第二步,根 ...

  6. [转]使用 Angular CLI 和 ng-packagr 构建一个标准的 Angular 组件库

    使用 Angular CLI 构建 Angular 应用程序是最方便的方式之一. 项目目标 现在,我们一起创建一个简单的组件库. 首先,我们需要创建一个 header 组件.这没什么特别的,当然接下来 ...

  7. MySQL 实现将一个库表里面的数据实时更新到另一个库表里面

    MySQL 实现将一个库表里面的数据实时更新到另一个库表里面 需求描述:MySQL 里面有很多的数据库,这些数据库里面都有同一种表结构的表 (tb_warn_log),这张表的数据是实时更新的,现在需 ...

  8. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  9. 划词标注1——使用svg绘制换行文本并自动识别库中字典数据

    业务需求 给出一段文本,自动识别出文本中包含的关键字信息,关键字是库里已知的数据,根据类型的不同显示出不同的颜色 业务分析 1)采用css:文本识别出来后,根据识别出的文本更改对应文本的dom,通过更 ...

随机推荐

  1. 使用css做图标

    首先原理是: 请一步一步粘贴代码,慢慢品味.其实,很简单... 1.首先三角形的前身是一个普通的矩形-正方形||长方形?ok! <div class='box'></div> ...

  2. LoadRunner读取文件并验证

            checkprocess()  {  char command[1024];  int i, total = 0;  char buffer[12], ch;  char *filen ...

  3. 四十八 常用内建模块 HTMLParser

    如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该HTML页面,看看里面的内容到底是新闻.图片还是视频. 假设第一步已经完成了,第二步应该如何解析HTML呢? HTML ...

  4. python中执行shell命令的几个方法小结(转载)

    转载:http://www.jb51.net/article/55327.htm python中执行shell命令的几个方法小结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014- ...

  5. 关于render函数的总结

    一般情况下封装一个导航组件的写法 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  6. 【转载】RecyclerView源码解析

    原文地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0307/4032.html 概述 之前面试的时候经常有人问是否用过Re ...

  7. ZOJ 3497 Mistwald

    矩阵快速幂. 邻接矩阵的$P$次方就是走$P$步之后的方案数,这里只记录能否走到就可以了.然后再判断一下三种情况即可. #pragma comment(linker, "/STACK:102 ...

  8. 洛谷P3620 [APIO/CTSC 2007] 数据备份 [堆,贪心,差分]

    题目传送门 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽 ...

  9. Python3 字典及三级菜单练习

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa list_1 = { '广州':{ '越秀区':{ '五羊石像','镇海 ...

  10. UVA 111(LCS问题)

     History Grading  Background Many problems in Computer Science involve maximizing some measure accor ...