ostream_iterator

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适配器。

ostream_iterator<int>(cout, " ")的解释

ostream_iterator是流迭代器。
流迭代器是标准模板库中的。因此是类模板。
ostream_iterator<int>
指定了类型,就是迭代器读写的类型。
通过这个流迭代器可以把你要输入的写入到指定的流中。
cout就是指定的流。就是标准输出。
可以改成一个输出流就可以,比如一个文件。
通俗的一点说,你把它看成一个指向输出流的指针。通过这个指针你可以把东西写的输出流中。
copy (v.begin(),v.end(),output);
这个意思就是说,把向量V中的数据放到cout输出流中,通过流迭代器output.
ostream_iterator<int> output(cout ,"*");
这个的意思说,放到输出流的时候,没放一个整数,就末尾添加一个*.

ostream_iterator

时间: 2024-11-02 12:43:10

ostream_iterator的相关文章

stream_iterator、ostream_iterator 使用初探

STL定义了供输入及输出的iostream iterator类,称为 istream_iterator和ostream_iterator,分别支持单一型别的元素的读取和写入. 使用方法: 1.包含头文件: #include <iterator>  using namespace std;       2.像使用其他iterator一样使用istream_iterator和 ostream_iterator.如:  使用一对"连接至标准输入"的iterator用于标示元素范围

copy函数与ostream_iterator、reverse_iterator

#include <iostream> #include <iterator> #include <vector> int main() { using namespace std; int casts[10]={6,7,2,9,4,11,8,7,10,5}; vector<int> dice(10); copy(casts,casts+10,dice.begin()); cout << "Let the dice be cast!\n

SGI 2.9.1源码手札 stream Iterator:istream_iterator 和ostream_iterator 知识核心点

短期代码阅读主要基于SGI的STL,测试环境则是GCC_4.8.3_STL和VS_STL.暂时不去配置BOOST等库STL细节.待续 1.istream_iterator 输入流迭代器 1)没有operator=操作,因为只读,不可写,所以编译不支持.迭代器句柄保存当前已读取到的数据. _GLIBCXX_CONSTEXPR istream_iterator()       : _M_stream(0), _M_value(), _M_ok(false) {}       ///  Constru

std::ostream_iterator用法

Defined in header <iterator>    template< class T, class CharT = char, class Traits = std::char_traits<CharT>>          class ostream_iterator : public std::iterator<std::output_iterator_tag, void, void, void, void> std::ostream_it

ostream_iterator和istream_iterator使用杂谈

我们在写Console程序时cout/cin,STL中提供了对应的iterator,可以更加灵活的使用. ostream_iterator<string> oo(cout); *oo="China\n"; ++oo; *oo="English\n"; 增加了类型的检查,*oo赋值为整形vs会报错. // *oo=1; error ostream_iterator可以做为函数对象放到copy中,这样可以输出s的每个值. string s="123

STL_算法(21)_ STL_算法_填充新值

STL_算法_填充新值 fill(b, e, v) fill(b, n, v) generate(b, n, p) generate_n(b, n, p) #include<iostream> #include<algorithm> #include<vector> #include<list> // #include<string> using namespace std; int main() { list<string> sli

Boost练习程序(multi_index_container)

代码来自:http://blog.csdn.net/whuqin/article/details/8482547 该容器能实现多列索引,挺好. #include <string> #include <iostream> #include <boost/multi_index_container.hpp> #include <boost/multi_index/member.hpp> #include <boost/multi_index/ordered

C++中字符数组和字符串string

字符数组 C++中字符数组用char str[]可以用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,因为系统会自动补上一个'\0'作为字符串的结束标志.当然对于未初始化的也补'\0'. #include <iostream> #include <string> using namespace std; int main() { char str[11] = "I am happy"; // 系统会自动补上'\0'空

谈谈vector容器的三种遍历方法

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector容器是最简单的顺序容器,其使用方法类似于数组,实际上vector的底层实现就是采用动态数组.在编写程序的过程中,常常会变量容器中的元素,那么如何遍历这些元素呢?本文给出三种遍历方法. 方法一:采用下标遍历 由于vector容器就是对一个动态数组的包装,所以在vector容器的内部,重载了[]运算符,函数原型为:reference operator [] (size_type n);所以我们可以采用类似于数组的方式来访问vector容