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,const string& lastname) { this->firstname=firstname; this->lastname=lastname; } //如果没有const,那么下面的copy()会报告一堆错误,重载为const是一个好习惯 friend ostream& operator <<(ostream& os,const Person& p) { os<
<<" "<
}
private:
string firstname ;
string lastname ;
friend class PersonSort;
};
class PersonSort
{
public:
bool operator()(const Person& p1,const Person& 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> >
class ostream_iterator
: public iterator
从这段代码中亦可以发现,ostream_iterator继承iterator,iterator通过output_iterator_tag来标记定义的iterator为ostream适配器。