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 {
os }
private:
string firstname ;
string lastname ;
friend class PersonSort;
};
class PersonSort
{
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擴充卡。