现在的位置: 首页 > 综合 > 正文

STL与泛型编程的一个问题

2014年10月27日 ⁄ 综合 ⁄ 共 1253字 ⁄ 字号 评论关闭

//一个按行读入文件并排序后在终端输出的程序
#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;
 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:
};
int _tmain(int argc, _TCHAR* argv[])
{
 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");
}

抱歉!评论已关闭.