zoukankan      html  css  js  c++  java
  • getline及读文件总结

    今天由华为软件精英挑战赛的要求,读文件这块自己进行了总结,主要是泛型以及关联容器这块需要加强,现在总结了读文件的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;//会自动覆盖原来的内容
    
    
    }
    

      

  • 相关阅读:
    dynamic和匿名对象
    生成1亿个不重复的8位随机整数
    Storage,Memcache,KVDB都是存储服务,如何区分何时用何种服务
    深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
    常用工具
    数字格式化,保留一位小数,无小数用0补充
    学习某些API的方法
    程序员的学习方法(程序员必看)【风中叶老师讲述】
    html的dtd声明
    数据库管理工具navicat基本使用方法——以MySql为例
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/6689524.html
Copyright © 2011-2022 走看看