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

住房和城乡建设部官方网站已网站开发哪里接到单子的

住房和城乡建设部官方网站已,网站开发哪里接到单子的,可以建网站的软件,手机网站建设企业1、迭代器模式的提出 在软件开发过程中,操作的集合对象内部结构常常变化,在访问这些对象元素的同时,也要保证对象内部的封装性。迭代器模式提供了一种利用面向对象的遍历方法来遍历对象元素。迭代器模式通过抽象一个迭代器类,不同…

1、迭代器模式的提出

在软件开发过程中,操作的集合对象内部结构常常变化,在访问这些对象元素的同时,也要保证对象内部的封装性。迭代器模式提供了一种利用面向对象的遍历方法来遍历对象元素。迭代器模式通过抽象一个迭代器类,不同的对象继承自迭代器类,外部通过统一接口访问元素。

2、需求描述

设计一个能添加数据元素的容器类,并且能够遍历容器数据元素。

3、功能实现

(1)UML图如下:

 

(2)代码实现如下:

#include <iostream>
#include <vector>// 抽象迭代器接口
template<typename T>
class Iterator {
public:virtual T& operator*() = 0;virtual Iterator<T>& operator++() = 0;virtual bool operator!=(const Iterator<T>& other) const = 0;virtual ~Iterator(){};
};// 具体迭代器类
template<typename T>
class ConcreteIterator : public Iterator<T> {
public:ConcreteIterator(T* ptr) : m_ptr(ptr) {}T& operator*() override {return *m_ptr;}Iterator<T>& operator++() override {++m_ptr;return *this;}bool operator!=(const Iterator<T>& other) const override {const ConcreteIterator* concreteOther = dynamic_cast<const ConcreteIterator*>(&other);return m_ptr != concreteOther->m_ptr;}private:T* m_ptr;
};// 具体容器类
template<typename T>
class Container {
public:void add(const T& element) {m_elements.push_back(element);}Iterator<T>* begin() {return  new ConcreteIterator<T>(&m_elements[0]);}Iterator<T>* end() {return new ConcreteIterator<T>(&m_elements[m_elements.size()]);}
private:std::vector<T> m_elements;
};class Client
{
public:void doWork(){Container<float> container;container.add(1.0);container.add(2.0);container.add(3.2);Iterator<float>* itBegin = container.begin();Iterator<float>* itEnd = container.end();while (*itBegin != *itEnd) {std::cout << **itBegin << "\n";++(*itBegin);}delete itBegin;delete itEnd;itBegin = nullptr;itEnd = nullptr;}
};int main() {Client obj;obj.doWork();return 0;
}

程序运行结果如下:

 根据容器下标实现的迭代器模式方法也可参考:设计模式-迭代器模式 C++实现_c++ 迭代器模式_MachineChen的博客-CSDN博客

4、面向对象实现迭代器分析

面向对象实现的迭代器模式是在程序运行时,通过虚函数去操作对象元素;相比于C++中的泛型编程实现迭代器的运行性能较低(泛型编程是在编译时已确定访问的元素),所以建议使用泛型编程实现迭代器。

5、泛型编程实现迭代器

#include <iostream>
#include <vector>template<typename T>
class Iterator {
public:Iterator(T* ptr) : m_ptr(ptr) {}// 解引用操作符T& operator*() {return *m_ptr;}// 前缀自增操作符Iterator& operator++() {++m_ptr;return *this;}// 后缀自增操作符Iterator operator++(int) {Iterator iterator = *this;++m_ptr;return iterator;}// 比较操作符bool operator!=(const Iterator& other) const {return m_ptr != other.m_ptr;}private:T* m_ptr;
};template<typename T>
class Container {
public:void add(const T& element) {m_elements.push_back(element);}Iterator<T> begin() {return Iterator<T>(&m_elements[0]);}Iterator<T> end() {return Iterator<T>(&m_elements[m_elements.size()]);}private:std::vector<T> m_elements;
};class Client
{
public:void doWork(){Container<float> container;container.add(1.0);container.add(2.0);container.add(3.2);for (Iterator<float> it = container.begin(); it != container.end(); ++it) {std::cout << *it << "\n";}}
};int main() {Client obj;obj.doWork();return 0;
}

程序运行结果如下:

http://www.yayakq.cn/news/260942/

相关文章:

  • 品牌网站建设设计公司代备案域名30元
  • 爱淘苗网站开发模式网页设计模板百度云
  • 网站优化员seo招聘电影网站怎么做不犯法
  • 安阳企业网站优化外包个人建站提供软件下载
  • 备案期间网站能打开吗美词原创网站建设
  • 目前做汽配的网站有哪些wordpress 添加外观
  • 微商城网站建设渠道勒流有做网站的吗
  • 网络营销网站设计网站首页的布局设计
  • 做名人故居的网站多少钱手机商城页面设计
  • wordpress怎么添加网盘下载南阳seo优化公司
  • 电子商务网站创建过程wordpress 中文 相册插件
  • 建设银行广东分行网站浏览器主页网址
  • 济南网站建设维护东城做企业网站多少钱
  • 靖江网站设计好看的网站后台界面
  • 网站风格总结网站建设心得感想
  • 普陀区建设局网站WordPress上传文件格式
  • 天津网站建设推广服务泉州关键词排名
  • 做商城网站哪里好网站横向菜单
  • 许昌工程建设信息网站wordpress 发布时间不对
  • wordpress 上传安装网站seo 文章转载 修改标题
  • 广西建设工程造价管理协会网站做文字图片的网站
  • 做网站什么职业网站建设域名什么意思
  • 整站优化外包服务律师做网站费用
  • 建设银行网银显示网站丢失flash网站建设技术精粹
  • 佛山 网站建设 骏域互动网站建设什么意思
  • 网站建设与制作教案八爪鱼采集器WordPress接口
  • 济南智能网站建设做简单网站怎么做
  • asp网站跳转浏览器网站建设投入及费用
  • 北京网站建设企业医疗生物科技 网站建设
  • 网站建设 定制商城 小程序开发线上app怎么做