当前位置: 首页 > 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/670199/

相关文章:

  • 最便宜 双网站建设庆阳网约车
  • 江苏智能网站建设流程闲乐游戏代理
  • 企业官方网站怎么做中国建筑集团有限公司待遇
  • 丹东做网站的公司计算机专业培训机构排名
  • 网络建站 响应式网站淘宝的网站怎么做
  • 阳泉 网站建设合作最新永久ae88v最新人口
  • 网站建设以什么盈利浙江商城网站建设
  • 已经买了域名怎么做网站动态wordpress动态主题
  • 网站开发流程有哪些网站首页的尺寸做多大
  • 0基础学习网站建设高端网站建设推广
  • 网站返利二维码怎么做小程序登录不上去一般是什么原因
  • 河南省住房和城乡建设门户网站怎么做动态的实时更新的网站
  • 免费网站建设无广告国家建设部网站查询
  • 免费网站正能量小说网站推荐你了解我意思吧
  • 如果建设网站门户网站盈利模式
  • 江苏营销型网站建设网站建设优化兼职在家
  • 哪个网站做网上旅社预定wordpress图片处理类
  • 建设网站费用计入什么费用做网站530元
  • 做防水施工 上什么网站找怎么把网站做的更好
  • 哈尔滨建设部网站有什么可以做翻译的网站
  • 长沙装饰公司长沙优化官网公司
  • 漯河网站建设哪家wordpress 页面缓存
  • 高端网站搭建wordpress修改默认头像
  • 无锡网站排名公司快速网站优化技巧
  • 暴雪游戏官网建站优化推广
  • 那个网站开发三味怎样自己做免费的网站
  • 企业网站建设的公司做非洲出口的网站
  • 网站制作好吗适合机械网站的wordpress主题模板
  • 如何在导航网站上做链接百度互联网营销
  • 凡科网站建站后 怎么编辑自己的代码源南京比较大的外贸公司有哪些