日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

23种设计模式C++源码与UML实现--迭代器模式

發布時間:2025/3/15 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式C++源码与UML实现--迭代器模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

迭代器模式

Iterator模式也叫迭代模式,是行為模式之一,他把對容器種包含的內部對象的訪問委讓給外部類,使用Iterator按順序進行遍歷訪問的設計模式。

在使用Iterator模式之前,首先應該明白Iterator模式是用來解決什么問題的。或者說如果不使用Iterator模式會存在什么問題。

  • 由容器自己實現順序遍歷。直接在容器類里添加順序遍歷方法
  • 讓調用者自己實現遍歷,直接暴露數據細節給外部
  • 以上實現方法存在的問題:

    方法1,容器承擔了太多的功能,一方面需要提供添加刪除等本身應有的功能,一方面還需要提供遍歷訪問功能。

    方法2,旺旺容器實現遍歷的過程中,需要保存遍歷的狀態,當跟元素的添加刪除等功能夾雜在一起很容易引起混亂和程序運行錯誤等。

    Iterator 模式就是為了有效地處理按順序進行遍歷訪問的一種設計模式,簡單地說 ,Iterator 模式提供一種有效的方法,可以屏蔽聚集對象集合的容器類的實現細節,而能對容器內包含的對象元素按順序進行有效的遍歷訪問。所以,Iterator 模式的應用場景可以歸納為滿足以下幾個條件:

    • 訪問容器中包含的內部對象
    • 按順序訪問

    角色和職責:提供一種方法順序訪問一個聚斂對象的各個元素,而又不暴露該對象的內部表示。為遍歷不同的聚集結構提供如開始,下一個,是否結束,當前一項等統一接口。

    Iterator(迭代器接口):

    該接口必須定義實現迭代功能的最小定義方法集,比如提供 hasNext()和 next()方法。

    ConcreteIterator(迭代器實現類):

    迭代器接口 Iterator 的實現類。可以根據具體情況加以實現。

    Aggregate(容器接口):

    定義基本功能以及提供類似 Iterator iterator()的方法。

    concreteAggregate(容器實現類):

    容器接口的實現類。必須實現 Iterator iterator()方法。

    說明:在迭代器中 持有 一個集合的 引用;所以通過迭代器,就可以訪問集合

    // // Created by andrew on 2020/11/29. // #include <iostream>using namespace std;typedef int Object;#define SIZE 5class MyIterator { public:virtual ~MyIterator() = default;virtual void First() = 0;virtual void Next() = 0;virtual bool IsDone() = 0;virtual Object CurrentItem() = 0; };class Aggregate { public:virtual ~Aggregate() = default;virtual MyIterator *CreateIterator() = 0;virtual Object getItem(int index) = 0;virtual int getSize() = 0; }; // 進行迭代的地方 class ConcreteIterator : public MyIterator { public:ConcreteIterator(Aggregate *ag) {_ag = ag;_current_index = 0;}virtual void First() {_current_index = 0;}virtual void Next() {if(_current_index < _ag->getSize()){_current_index ++;}}virtual bool IsDone() {return (_current_index == _ag->getSize());}virtual Object CurrentItem() {return _ag->getItem(_current_index);}private:int _current_index;Aggregate *_ag; };// 存儲需要迭代的內容 class ConcreteAggregate : public Aggregate { public:ConcreteAggregate() {for(int i = 0; i < SIZE; i++) {object[i] = i + 100;}}MyIterator *CreateIterator() override{return new ConcreteIterator(this); // 讓迭代器持有一個集合的引用}Object getItem(int index) override {return object[index];}int getSize() override {return SIZE;} private:Object object[SIZE]; };int main(int argc, char *argv[]) {Aggregate *aggregate = new ConcreteAggregate;MyIterator *myIterator = aggregate->CreateIterator();for(; !(myIterator->IsDone()); myIterator->Next()) {cout << myIterator->CurrentItem() << " ";}delete myIterator;delete aggregate;cout << "iterator demo" << endl;return 0; }

    總結

    以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--迭代器模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。