当前位置: 首页 > wzjs >正文

做网站怎样和客户沟通四川省建设监理协会官方网站

做网站怎样和客户沟通,四川省建设监理协会官方网站,长沙网站建设规划,vue网站开发实例一、成员变量与核心逻辑 1.1 数据成员 protected:std::istream* stream; // 输入流指针(绑定到istream对象)T value; // 当前缓存值(存储最近读取的数据)bool end_marker; // 流结束标志(EOF或…

一、成员变量与核心逻辑

1.1 数据成员
protected:std::istream* stream;  // 输入流指针(绑定到istream对象)T value;               // 当前缓存值(存储最近读取的数据)bool end_marker;       // 流结束标志(EOF或读取失败时标记)
  • 作用
    • stream 绑定输入流(如 cin 或文件流),通过指针管理生命周期
    • value 缓存当前读取值,遵循STL输入迭代器单次只读特性
    • end_marker 标记流是否可继续读取,与 streamgood()/eof() 状态关联
1.2 read() 方法
void read() {end_marker = (*stream) ? true : false;if (end_marker) {*stream >> value;          // 尝试提取数据end_marker = (*stream) ? true : false;  // 二次验证流状态}if (!end_marker) {stream = nullptr;         // 标记流失效}
}
  • 关键逻辑
    1. 初始检查流有效性(隐式调用 operator bool() 判断 goodbit
    2. 若有效则尝试读取数据到 value,此时可能触发流错误标志(如类型不匹配)
    3. 再次验证流状态,处理中途失败的情况
    4. 流失效时置空指针,与结束迭代器状态对齐

二、构造函数与迭代器初始化

2.1 默认构造函数
istreamIterator() : stream(nullptr), end_marker(true) {}
  • 作用:创建流结束迭代器(类似 istream_iterator<T>()
  • 特点
    • stream=nullptr 明确标识结束状态
    • end_marker=true 确保与有效迭代器比较时能正确判断终止条件
2.2 绑定输入流的构造函数
explicit istreamIterator(std::istream& s) : stream(&s), end_marker(false) {read();  // 初始化时立即读取首个值
}
  • 特点
    • 构造时立即调用 read(),确保首次解引用即有有效值
    • 与STL的 istream_iterator<T>(istream) 行为一致,触发首次数据读取
    • explicit 禁止隐式类型转换,避免误用

三、迭代器操作符重载

3.1 解引用操作符
reference operator*() const { if (!stream) throw std::logic_error("Dereference on end iterator");return value; 
}
  • 行为
    • 返回当前缓存值的常量引用,符合输入迭代器只读特性
    • 安全性检查防止对结束迭代器解引用(STL标准行为未定义)
3.2 递增操作符
// 前置递增
istreamIterator& operator++() {if (!stream) throw std::logic_error("Increment on end iterator");read();return *this;
}// 后置递增
istreamIterator operator++(int) {istreamIterator tmp = *this;++(*this);return tmp;
}
  • 关键逻辑
    • 每次递增都会调用 read() 更新 valueend_marker
    • 后置递增返回旧值的拷贝,与STL迭代器行为一致
    • 前置版本效率更高(避免临时对象复制)

四、迭代器比较与流结束判断

4.1 相等运算符
friend bool operator==(const istreamIterator& x, const istreamIterator& y) {// 两个都是结束迭代器if (x.stream == nullptr && y.stream == nullptr) return true;  // 同一流且同为结束状态if (x.stream == y.stream && x.end_marker == y.end_marker) return true;// 一方是结束迭代器,另一方已读到结束return (x.stream == nullptr && y.end_marker) || (y.stream == nullptr && x.end_marker);
}
  • 比较规则
    1. 两个结束迭代器等价(stream=nullptr
    2. 同一流的两个迭代器需满足相同的结束状态
    3. 混合比较时需匹配"有效迭代器到结束"的过渡状态
4.2 不等运算符
friend bool operator!=(const istreamIterator& x, const istreamIterator& y) {return !(x == y);
}
  • 实现:直接复用 operator== 的结果,避免逻辑重复

五、模板类型定义与STL兼容性

typedef std::input_iterator_tag iterator_category;
typedef T value_type;
typedef Distance difference_type;
typedef const T* pointer;
typedef const T& reference;
  • 作用
    • 定义迭代器类型特征,确保与STL算法(如 copyaccumulate)兼容
    • const 修饰符强制实现只读语义,防止意外修改

六、整体代码

#include <iostream>
#include <iterator>template <class T, class Distance = ptrdiff_t>
class istreamIterator {
protected:std::istream* stream;  // 输入流指针T value;               // 当前缓存值bool end_marker;        // 流结束标志// 核心数据读取方法void read() {end_marker = (*stream) ? true : false;if (end_marker) {*stream >> value;          // 尝试提取数据end_marker = (*stream) ? true : false;  // 验证提取结果}if (!end_marker) {stream = nullptr;         // 标记流失效}}public:// 类型定义typedef std::input_iterator_tag iterator_category;typedef T value_type;typedef Distance difference_type;typedef const T* pointer;typedef const T& reference;// 构造函数istreamIterator() : stream(nullptr), end_marker(true) {}explicit istreamIterator(std::istream& s) : stream(&s), end_marker(false) { read(); }// 禁用拷贝istreamIterator(const istreamIterator&) = delete;istreamIterator& operator=(const istreamIterator&) = delete;// 解引用reference operator*() const { if (!stream) throw std::logic_error("Dereference on end iterator");return value; }pointer operator->() const { return &(operator*()); }// 递增操作符istreamIterator& operator++() {if (!stream) throw std::logic_error("Increment on end iterator");read();return *this;}istreamIterator operator++(int) {istreamIterator tmp = *this;++(*this);return tmp;}// 比较运算符friend bool operator==(const istreamIterator& x, const istreamIterator& y) { /* 同上述修正方案 */ }friend bool operator!=(const istreamIterator& x, const istreamIterator& y) { return !(x == y); }
};

文章转载自:

http://gy4uBlql.hkysq.cn
http://zuHM6QgH.hkysq.cn
http://VCaJ1sci.hkysq.cn
http://A5z3LwrQ.hkysq.cn
http://a8xXovfH.hkysq.cn
http://3ggYxsHi.hkysq.cn
http://2SwNRxaP.hkysq.cn
http://18Ddm3or.hkysq.cn
http://Ay2MgsiG.hkysq.cn
http://a1N5cFA9.hkysq.cn
http://dzmgDidI.hkysq.cn
http://AnDCOST4.hkysq.cn
http://5BlR2rV1.hkysq.cn
http://e9DH2TtK.hkysq.cn
http://lNa37SdS.hkysq.cn
http://ye7XbNRm.hkysq.cn
http://Tl3eOLGL.hkysq.cn
http://eiUfDXcY.hkysq.cn
http://UQ0M5r4n.hkysq.cn
http://DEqb1WT5.hkysq.cn
http://duWYtLwx.hkysq.cn
http://02dbk0N7.hkysq.cn
http://HmNnOi92.hkysq.cn
http://dNkrFMnm.hkysq.cn
http://pTJ4jXHS.hkysq.cn
http://gs653Ut4.hkysq.cn
http://Ooe52ewF.hkysq.cn
http://pgRXZtRU.hkysq.cn
http://zNdXiyCB.hkysq.cn
http://9nKk4Xhe.hkysq.cn
http://www.dtcms.com/wzjs/619388.html

相关文章:

  • 怎么做网站的百度权重西安 网站建设
  • 轻云服务器菁英版 多个网站网站备案 取名资讯通不过
  • 成都网站建设排行榜淘数据官网
  • 如何对网站ftp进行上传小程序定制公司
  • 高端网站定制商怎么让网站文章被收录
  • 百度搜到网站wordpress账号邮箱
  • 城市门户网站模板有免费的网站做农家院宣传
  • seo于刷网站点击冯提莫斗鱼前在哪个网站做直播
  • 广陵建设局网站芜湖效能建设网站
  • 做质粒图谱的网站关于wordpress
  • 如何免费建立一个自己的网站企业网站建设市场前景
  • 网站设计实例教程wordpress 页面排序
  • vs网站开发 百度文库班级主页网页设计模板
  • 上海网站优化排名全国物流网站有哪些平台
  • 网站介绍词快要到期的域名网站
  • 做网站自适应框架锦州网站开发建设
  • 乾县交通建设网站做企业网站有什么工作内容
  • 望京 网站开发建网站深
  • 河北城乡建设厅网站显示不全wordpress按分类显示图片
  • 个人网站包括哪些内容网页开发工具软件
  • 山东英文网站建站wordpress自定义页脚
  • 做网站哪间好拖曳式网站建设
  • 哪里找做网站的百度seo网站排名
  • 永德网站建设精美的商城网站介绍
  • 江苏建设厅网站电话多少seo查询整站
  • 企业网站模板素材网站建设到维护
  • c 网站开发流程eclipse网站开发实例
  • 九酷为什么做福音网站企业展厅布展设计
  • html网站标题怎么做的建网站找哪里
  • 互动网站如何做如何自己创造游戏