ostream_iterator详细解析

来源:互联网 发布:大赢通软件下载 编辑:程序博客网 时间:2024/06/05 09:19
 1.istream_iterator 在<iterator>头文件的定义中

定义istream_iterator变量的方法为

istream_iterator<T> in(strm);    (其中T指明此istream_iterator的输入类型 , strm为istream_iterator指向的流)

提供了输入操作符(>>)和 输出操作符 (<<)的任何类型都可以创建 istream_iterator 对象和ostream_iteratorcfq对象,即对自己的类重载了这两个函数:

istream &operator >> (istream &is, &MyClass c);

和 ostream &operator << (ostream &os , const  &MyClass c);

 2. ostream_iterator属于I/O流STL适配器,用于获取一个元素,同时保存在缓冲器中,可以供Cout输出。如果把cout看做成一个对象,那么在Cout对象当中存在一片用于数据存储的区域。ostream_iterator在STL中一般配合copy函数一起使用,如下代码;

  ostream_iterator output(cout, " "); //关联cout,设置分隔符
   copy(ivec.begin(), ivec.end(), output);//元素拷贝到ostream_iterator所指向的对象cout
    cout;//显示cout的值

   ostream_iterator中,template如果是一个类名称的时候,那么这个类必须实现重载”<<”输出运算符号,用于数据的输出。如下代码;

class Person
{
public:
       Person(const string& firstname,conststring& lastname)
       {
               this->firstname=firstname;
               this->lastname=lastname;
       }
//如果没有const,那么下面的copy()会报告一堆错误,重载为const是一个好习惯
       friend ostream& operator<<(ostream& os,constPerson& p)
       {
               os<       }
private:
       string firstname ;
       string lastname ;
       friend class PersonSort;
};
class PersonSort
 
public:
       bool operator()(const Person& p1,constPerson& p2) const
       {
               return(p1.lastname       }
};
int main()
{
       typedef set PersonSet;
       PersonSet ps;
       ps.insert(Person("hongjian","chen"));
       ps.insert(Person("lizhong","li"));
       ps.insert(Person("xuan","liu"));
copy(ps.begin(),ps.end(),ostream_iterator(cout,"/n"));
return 0;
}

 
    另外、

template   class _Tr = char_traits<_E>>
    classostream_iterator
       : public iterator

 从这段代码中亦可以发现,ostream_iterator继承iterator,iterator通过output_iterator_tag来标记定义的iterator为ostream适配器。
0 0
原创粉丝点击