今天学习了流迭代器,自己写了一个将文件的string数据读入的小程序,这里将输入流迭代器和输入文件流相绑定,然后通过判断输入流迭代器是否和结束迭代器相等来判断数据是否读取完毕,最后将这些数据存储在vector中,并将它们打印出来。。。
程序如下:
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <iterator>
using namespace std;
ifstream& open_file(ifstream &in,const string &file)
{
in.close();
in.clear();
in.open(file.c_str());
return in;
}
int main(int argc,char **argv)
{
ifstream infile;
open_file(infile,argv[1]);
istream_iterator<string> in_iter(infile);
istream_iterator<string> eof;
vector<string> vec(in_iter,eof);
vector<string>::iterator iter=vec.begin();
while (iter!=vec.end())
{
cout<<*iter++<<endl;
}
system("pause");
return 0;
}
这里通过main的参数向程序传递读取文件的文件名,在调试的时候,我们在项目属性下的debugging选项卡的commad arguments后添加我们的文件名,同时要把文件添加到我们的项目文件夹中。。。
我们还可以结合输出流迭代器的使用,直接将通过输入迭代器读入的数据通过输出迭代器实现标准输出,这里我们要将输出流迭代器与输出流相绑定。。。修改程序如下:
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <iterator>
using namespace std;
ifstream& open_file(ifstream &in,const string &file)
{
in.close();
in.clear();
in.open(file.c_str());
return in;
}
int main(int argc,char **argv)
{
ifstream infile;
open_file(infile,argv[1]);
istream_iterator<string> in_iter(infile);
istream_iterator<string> eof;
ostream_iterator<string> out_iter(cout,"/n");
while (in_iter!=eof)
{
*out_iter++=*in_iter++;
}
system("pause");
return 0;
}