stream iterators源代码详解


    所谓stream iterators,可以将迭代器绑定到一个stream(数据流)对象身上。绑定istream对象(例如:std:cin),称为 istream_iterator,拥有输入能力。乍听之下真神奇。所谓绑定一个istream object,其实就是在istream iterator内部维护一个istream member,客户端对于这个迭代器所做的operator++操作会导致调用迭代器内部所含的那个istream member的输入操作(operator>>)。这个迭代器是个input iterator,不具备operator--。下面的源代码说明了一切:

template <class T,class Distance =ptrdiff_t>
class istream_iterator{
    friend bool;
    operator==_STL_NULL_TMPL_ARGS (const istream_iterator<T,Distance>& x,
                             const istream_iterator<T, Distance>& Y);
    protected:
        istream* stream;
        T value;
        bool end_marker;
        void read(){
            end_marker=(*stream)? true : false;
            if(end_marker)
                *stream >> value;
            ///以上,输入之后,stream的状态可能改变,
                       / 所以下面再判断一次以决定 end_marker
            当读到eof或读到型别不同的资料,stream即处于false状态
            end_marker=(*stream) ? true : false;
        }
    public:
        typedef input_iterator_tag        iterator_category;
        typedef T                        value_type;
        typedef Distance                difference_type;
        typedef const T*                pointer;
        typedef const T&                reference;

        istream_iterator() : stream(&cin), end_marker(flase) {}
        istream_iterator(istream& s) : stream(&s) {read();}
        以上两行的代码的用法:
        /istream_iterator<int> eos;   造成end_marker 为 false;
        /istream_iterator<int> initer(cin);   引发read(),程序至此会等待输入
        reference operator*() const {return value; }
        pointer operator->() const {return &operator*(); }
        迭代器每前进一个位置,就代表独取一笔资料
        istream_iterator<T,Distance>& operator++(){
            read();
            return *this();
        }
        istream_ierator<T,Distance> operator++(int){
            istream_iterator<T,Distance> tmp=*this;
            read();
            return tmp;
        }
};

本原创文章来源:C++技术网 http://www.cjjjs.cn ,原创精品文章,欢迎访问C++技术网。

转载于:https://www.cnblogs.com/cjjjs/p/4963516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV与图像处理学习十一——分水岭算法(含代码)

OpenCV与图像处理学习十一——分水岭算法&#xff08;含代码&#xff09;一、分水岭算法概要二、分水岭算法步骤三、代码应用一、分水岭算法概要 任意的灰度图像可以被看做是地质学表面&#xff0c;高亮度的地方是山峰&#xff0c;低亮度的地方是山谷。 给每个孤立的山谷&…

python清空文件夹

要清空一个文件夹&#xff0c;可以通过删除该文件夹再新建一个一样的文件夹来达到清空文件夹的效果 import os import shutilshutil.rmtree(dirpath) # 能删除该文件夹和文件夹下所有文件 os.mkdir(dirpath)

10件5G能实现但4G不能做的事情

来源&#xff1a;雷锋网 5G的一些最佳用途可能还没有被发现&#xff0c;但下面是我们已经知道的十个令人兴奋的用途。雷锋网按&#xff1b;2019年6月6日&#xff0c;工信部正式向中国电信、中国移动、中国联通、中国广电发放5G商用牌照&#xff0c;这表明中国正式进入了5G商用的…

【VS开发】CString 转为 char *方法大全

【VS开发】CString 转为 char *方法大全 标签&#xff08;空格分隔&#xff09;&#xff1a; 【VS开发】 方法1&#xff1a; CString strTemp; char szTemp[128];strTemp _T("abckdkfei"); memset( szTemp, 0, sizeof(szTemp) ); strcpy( szTemp, strTemp.GetBuffer…

OpenCV与图像处理学习十二——图像形状特征之HOG特征

OpenCV与图像处理学习十二——图像形状特征之HOG特征一、图像特征理解1.1 颜色特征1.2 纹理特征1.3 形状特征1.4 空间关系特征二、形状特征描述2.1 HOG特征2.1.1 基本概念2.1.2 HOG实现过程2.1.3 代码实现前面介绍了图像的基础知识、基本处理方法以及传统图像分割的应用&#x…

python删除文件

import osif os.path.exists(path):os.remove(path)

深度解读:5G正式发牌,国内通信市场冷暖预判

来源&#xff1a;ICT解读者2019年6月6日&#xff0c;工业和信息化部向中国电信、中国移动、中国联通和中国广电正式颁发5G牌照&#xff0c;批准四家企业经营“第五代数字蜂窝移动通信业务”。这标志着我国正式进入5G商用元年。一石激起千层浪&#xff0c;相较于此前各运营商官方…

OpenCV与图像处理学习十三——Harris角点检测(含代码)

OpenCV与图像处理学习十三——Harris角点检测&#xff08;含代码&#xff09;一、角点的概念二、Harris角点检测的实现过程三、Harris代码应用一、角点的概念 角点&#xff1a; 在现实世界中&#xff0c; 角点对应于物体的拐角&#xff0c; 道路的十字路口、 丁字路口等。 从…

wpf prism IRegionManager 和IRegionViewRegistry

引入了一个新的问题&#xff0c;IRegionViewRegistry和IRegionManager都具有RegisterViewWithRegion方法&#xff0c;二者有区别么&#xff1f; 答案是——没有。我们已经分析过&#xff0c;在UnityBootstrapper的中&#xff0c;已经默认建立了IRegionManager和RegionManager的…

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

python表示条件之间的逻辑与除了用and还可以用&&#xff0c;把and换成&即可

ubuntu zip解压

您好&#xff0c;zip xx.zip压缩&#xff0c;unzip xx.zip 解压&#xff0c;tar zcvf xx.tar.gz压缩tar zxvf xx.tar.gz解压转载于:https://www.cnblogs.com/zxouxuewei/p/4973319.html

Go map如何排序

1. 将key 或 value 单独组成其类型的切片或数组&#xff0c;进行排序 package mainimport ("fmt""sort" )func main() {table : map[string]string{"hello": "hello","world": "world","a": "…

德勤发布《中国智能制造分析报告》

来源&#xff1a;CIO俱乐部亚洲正受到自动化、智能化大潮冲击。国际劳工组织调研发现&#xff0c;越南、柬埔寨、菲律宾和印度尼西亚的工人的失业风险最高&#xff0c;据估计这几个区域约50%的工人工作可能在未来20年被自动化取代。亚洲尤其是中国作为制造业的重要区域&#xf…

OpenCV与图像处理学习十四——SIFT特征(含代码)

OpenCV与图像处理学习十四——SIFT特征&#xff08;含代码&#xff09;一、SIFT算法二、SIFT实现过程三、代码实现一、SIFT算法 SIFT&#xff0c; 即尺度不变特征变换算法&#xff08;Scale-invariant feature transform&#xff0c;SIFT&#xff09; &#xff0c; 是用于图像…

tf.TensorArray

TensorArray可以看做是具有动态size功能的Tensor数组。通常都是跟while_loop或map_fn结合使用。 ta tf.TensorArray(size, dtype, dynamic_sizeTrue) # dynamic_size指定数组长度可变 ta.stack(nameNone) # 将TensorArray中元素叠起来当做一个Tensor输出 ta.unstack(value,…

液态大脑与固态大脑——圣塔菲最新群体智能文集

来源&#xff1a;The Royal society撰文 | Ricard Sol, Melanie Moses, and Stephanie Forrest大脑&#xff0c;神经元构成的器官根植于许多生物体内。这是一种固态的大脑&#xff0c;且组成它们的元素在空间中相对固定。但是相对的&#xff0c;大脑是否可以拥有流动不定的存在…

设置按钮中的图片的旋转,并且旋转之后不变形

1、设置按钮属性&#xff1a;self.titleBtn.imageView.contentMode UIViewContentModeCenter;self.titleBtn.imageView.clipsToBounds NO; 2、处理点击事件 - (void)titleBtnClick {self.titleBtn.imageView.transform CGAffineTransformMakeRotation(M_PI_2); }转载于:http…

OpenCV与图像处理学习十五——LBP纹理特征(含代码)

OpenCV与图像处理学习十五——LBP纹理特征&#xff08;含代码&#xff09;一、LBP介绍二、LBP原理三、代码应用一、LBP介绍 LBP&#xff08;Local Binary Pattern&#xff0c; 局部二值模式&#xff09; &#xff0c; 是一种用来描述图像局部纹理特征的算子&#xff1b; 它具有…

pycharm运行程序时看不到任何结果显示

原因是用程序选择了console来运行&#xff0c;取消console方法如下&#xff1a; Run->Edit Configurations 取消run with python console的勾

iOS 的 XMPPFramework 简介

XMPPFramework是一个OS X/iOS平台的开源项目&#xff0c;使用Objective-C实现了XMPP协议&#xff08;RFC-3920&#xff09;&#xff0c;同时还提供了用于读写XML的工具&#xff0c;大大简化了基于XMPP的通信应用的开发。 1. 登录和好友上下线 1.1XMPP中常用对象们 XMPPStream&a…