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

网站开发主要学些什么软件资阳市网站建设

网站开发主要学些什么软件,资阳市网站建设,上海城乡建设中级职称报名网站,c2c网站免费建设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/561796/

相关文章:

  • 新网站备案查询欧美风格网站特点
  • 有什么网站可以做电子newcard wordpress
  • 中博建设集团有限公司网站devexpress做网站
  • 链接关系 网站层次结构郑州网站制
  • 买链接网站公司网站设计维护
  • 西乡网站建设公司58这种网站怎么做
  • 动易的网站能否静态网站功能是什么
  • 司法局网站建设方案数字营销是干啥的
  • 有没有人做网站做新媒体文的网站
  • 直播网站商务网站建设与管理
  • wordpress 新闻发布wordpress 界面优化
  • 网站开发 脚本怎么写phpcmsv9蓝色简洁下载网站模板
  • 东莞外贸网站建设工程建设公司官网
  • 网站内容优化的重要性wordpress 文章 碎片
  • 西安网站搭建建设定制分宜网站建设
  • 可以做网站的语言如何在百度上做公司做网站
  • 新手学做网站图纸博客网站开发毕设
  • 网站开发报告书做跨境电商的网站
  • 前端开发可以做网站运营吗平台很重要经典的句子
  • 电商网站 解决方案工商网站查询企业信息官网
  • 浙江大经建设集团网站浏览器哪个好
  • 儿童早教网站模板在线图片编辑免费
  • 网站屏蔽右键破解做网络推广有哪些平台
  • 政务网站建设的重要性广州腾虎网络网站建设
  • 深圳可以做网站的公司大连凯杰建设有限公司官方网站
  • 招生网站怎么做网站建设技术风险
  • 全国企业公示系统查询上海城市分站seo
  • 小视频解析网站怎么做如何对网站进行推广
  • 网站优化公司排行做彩票网站怎么样
  • 广告网站设计公司 作用汽车网站建设流程图