今天由华为软件精英挑战赛的要求,读文件这块自己进行了总结,主要是泛型以及关联容器这块需要加强,现在总结了读文件的iterator的用法。

1、iterator inserter(essential C++ P93)

不需要限定容器的大小就进行插入:使用inserter adapter,这些adapter可以避免容器的assignment操作。

*back_inserter()会以容器的push_back()函数取代assignment运算符;

vector<int> vec;

vector<int> ivec{1,2,3,4};

copy(ivec.begin(),ivec.end(),back_inserter(vec));

  

*inserter()会以容器的push_front()函数取代assgnment运算符。这个inserter()接受两个参数;一个是容器,另一个是iterator,它指向容器内需要插入的位置。

vector<int> vec;
copy(vec.begin(),vec.end(),inserter(vec,vec.end())

*front_inserter()会以容器的push_back()函数取代assignment运算符。但是这个inserter只适合于list和deque。

记住上面的adapter不能用于array。

2、使用iostream iterator;

标准库定义有供输入和输出用的iostream iterator类,称为istream_iterator和ostream_iterator,支持单一类型的读取和写入,它们包含在《iterator》中,其中first表示为

istream_iterator<string> is(filename);

last定义为

istream_iterator<string> eof;

然后使用泛型算法copy(),将文件读取到vector<string> vec中

copy(is,eof,back_inserter(vec));

*******

如果要在两个字符之间插入符号,比如空格,可以使用如下的形式:

copy(is,eof,back_inserter(vec));
ostream_iterato<string> os(output_filename," ");
copy(vec.begin(),vec.end(),os);

  

getline(istream &in, string &s)

从输入流读入一行到string s

**读取一个文件(多行)存储到一个二维数组里面

void readFiletoVec() {
vector<vector<string>> vecFile;
ifstream in("input.txt");
vector<string> tmp,outVec;
ostream_iterator<string> outIter(cout, " ");
string s,tmpS;
while (getline(in, s)) {//读取每一行
istringstream ss(s);
while(ss >> tmpS)//每次读取,空格作为每次读取结束的标志
tmp.push_back(tmpS);
vecFile.push_back(tmp);
vector<string>().swap(tmp);//清空 }
for each(outVec in vecFile) {
copy(outVec.begin(),outVec.end(),outIter);
cout << endl;
} }

  

•功能:
–从输入流中读入字符,存到string变量
–直到出现以下情况为止:
•读入了文件结束标志
•读到一个新行
•达到字符串的最大长度
–如果getline没有读入字符,将返回false,可用于判断文件是否结束
 
 
#include<iostream>
#include<sstream>
#include<fstream>
#include<string>
using namespace std;
int Count = 0;
void IntSolve(int n) {
if (n == 1)
++Count;
for (int i = 2; i <= n;++i) {
if (n%i == 0)
IntSolve(n / i);
}
} int main() {
int n=0;
string s = "input.txt";//需要放在文件的project目录下
string sout = "output.txt";//自动创建文件
ifstream file;
ofstream output(sout);
file.open(s);
file >> n;
file.close();
IntSolve(n);
output << Count;//会自动覆盖原来的内容 }

  

最新文章

  1. JavaScript系列文章:从let和const谈起
  2. SQL 常识
  3. nodejs+sequelize操作mysql数据库
  4. Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版
  5. WinForm 多窗体操作
  6. [Objective-C]__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
  7. Unity中的Path对应各平台中的Path
  8. python 中 input 和 raw_input 的区别
  9. (ASP.Net)MVC4怎么设置@Html.TextBoxFor样式
  10. Helpers\PHPMailer
  11. Android版的疯狂猜图游戏源码完整版分享
  12. HashPasswordForStoringInConfigFile 已过时
  13. 使用SQL Server 2014内存数据库时需要注意的地方
  14. centos6.6安装mysql5.7.6(采用MySQL Yum Repository)—(先看最后一行)
  15. PDF数据防扩散系统方案
  16. 局域网连接SQL Server数据库配置
  17. 人人公益模式系统开发app
  18. Java ascii码值转为输出ascii码
  19. Mac 日常使用tips
  20. Unity角色对话

热门文章

  1. window下载并且安装kafka
  2. 查看svn 提交记录
  3. python 爬取图片
  4. C语言:对传入sp的字符进行统计,三组两个相连字母“ea”&quot;ou&quot;&quot;iu&quot;出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。
  5. 2_1 aabb
  6. Emprie 使用基础笔记
  7. 微信小程序开发调试阶段不校验请求域名
  8. ORM框架的概述
  9. ETCD授权认证
  10. 基于docker的以太坊集群的私有链开发环境