//一个按行读入文件并排序后在终端输出的程序
#include "stdafx.h"
#include "iostream"
#include "vector"
#include "algorithm"
#include "string"
#include "fstream"
using namespace std;
class line_iterator
{
istream* in;
string line;
bool is_valid;
void read()
{
if (*in)
{
getline(*in,line);
}
is_valid = (*in) ? true : false;
}
public:
typedef input_iterator_tag iterator_category;
typedef string value_type;
typedef ptrdiff_t difference_type;
typedef const string* pointer;
typedef const string& reference;
{
istream* in;
string line;
bool is_valid;
void read()
{
if (*in)
{
getline(*in,line);
}
is_valid = (*in) ? true : false;
}
public:
typedef input_iterator_tag iterator_category;
typedef string value_type;
typedef ptrdiff_t difference_type;
typedef const string* pointer;
typedef const string& reference;
line_iterator() : in(&cin), is_valid(false){}
line_iterator(istream& s) : in(&s) {read();}
reference operator*() const {return line;}
pointer operator->() const {return &line;}
line_iterator operator++()
{
read();
return *this;
}
line_iterator operator++(int)
{
line_iterator tmp = *this;
read();
return tmp;
}
bool operator==(const line_iterator& i) const
{
return (in == i.in && is_valid == i.is_valid) || (is_valid == false && i.is_valid == false);
}
bool operator!=(const line_iterator& i) const
{
return !(*this == i);
}
protected:
private:
};
line_iterator(istream& s) : in(&s) {read();}
reference operator*() const {return line;}
pointer operator->() const {return &line;}
line_iterator operator++()
{
read();
return *this;
}
line_iterator operator++(int)
{
line_iterator tmp = *this;
read();
return tmp;
}
bool operator==(const line_iterator& i) const
{
return (in == i.in && is_valid == i.is_valid) || (is_valid == false && i.is_valid == false);
}
bool operator!=(const line_iterator& i) const
{
return !(*this == i);
}
protected:
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin("d://andy.txt",ios::in);
line_iterator iter(fin);
{
ifstream fin("d://andy.txt",ios::in);
line_iterator iter(fin);
// 原来是 line_iterator iter(cin); 这个如何结束啊?
line_iterator end_of_file;
vector<string> v(iter,end_of_file);
sort(v.begin(),v.end());
copy(v.begin(),v.end(),ostream_iterator<string>(cout,"/n"));
system("PAUSE");
}
line_iterator end_of_file;
vector<string> v(iter,end_of_file);
sort(v.begin(),v.end());
copy(v.begin(),v.end(),ostream_iterator<string>(cout,"/n"));
system("PAUSE");
}