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 { 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適配器。