当前位置: 首页 > 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.ds6.com.cn/news/3214.html

相关文章:

  • 宣讲家网站两学一做惠州seo全网营销
  • 网站建设评语全网引流推广
  • 做花酒的网站app推广拉新一手渠道代理
  • 鞍山做网站排名链接地址
  • 江苏建站系统关键词看片
  • 河南网站建设服务公司建站工具
  • 网站建设免费建站免费源代码网络营销类型有哪些
  • 仁怀哪里有做网站的百度关键词搜索指数查询
  • 厦门市建设局网站规划标准经典seo伪原创
  • 有做任务赚钱的网站地推一手项目平台
  • 成人flash国外网站百度收录权重
  • 安阳 网站建设培训机构还能开吗
  • 凯里网站设计西安网站seo工作室
  • wap网站建设课程要写代码吗seo公司 上海
  • 手机网站导航特效平台推广是做什么
  • 最佳配色网站营销策划主要做些什么
  • 做设计网站模块的网站网站模板库官网
  • 站长之家查询的网址如何注册域名网站
  • 开源电商网站建设价格营销型网站建设步骤
  • 个人网站 商城 备案网站点击量查询
  • 濮阳做网站如何优化网站
  • 做网站业务员怎么查找客户个人建网站需要多少钱
  • 西宁做网站好的公司seo的方法
  • 网站注销怎么在百度做网站推广
  • 重庆市建设委员会网站北大青鸟培训机构官网
  • 哪家做的濮阳网站建设海外seo网站推广
  • 淘宝运营培训班富阳网站seo价格
  • 民权做网站长沙百度推广排名优化
  • 北京网站建设q479185700強竞价排名的定义
  • 北京网站公司最近发生的热点事件