您的位置:首页 > 其它

ostream_iterator详细解析

2016-05-22 09:40 459 查看
 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适配器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: