日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

设计模式复习-迭代器模式

發(fā)布時(shí)間:2025/6/17 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式复习-迭代器模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Iterator.H #pragma once #include <list> #include <windows.h> using namespace std;/* 設(shè)計(jì)模式-迭代器模式(Iterator) 提供一種方法順序訪問一個(gè)聚合對(duì)象中的各個(gè)元素,而不暴露該對(duì)象內(nèi)部表示。 (現(xiàn)在好多語言都已經(jīng)內(nèi)置實(shí)現(xiàn)了這個(gè)功能了,所以實(shí)際用途不大, 但是建議寫一下,實(shí)現(xiàn)過程價(jià)值遠(yuǎn)遠(yuǎn)大于使用價(jià)值。) */class Iterator{//迭代器抽象類public:virtual void * First() = 0;virtual void * Next() = 0;virtual BOOL IsDone() = 0;virtual void * CurrentItem() = 0; };class CAggregate {//聚集抽象類public:virtual Iterator * CreateIterator() = 0;virtual void Insert(void * const pNode) = 0;virtual void Remove(void * const pNode) = 0; };class CConcreteAggregate :public CAggregate {//具體聚集類public:list<void*>mpItems;CConcreteAggregate();void Clear();Iterator * CreateIterator();void Insert(void * const pNode);void Remove(void * const pNode); };class CConcreteIterator : public Iterator {//具體的迭代器類private:CConcreteAggregate *mpAggregate = NULL;int mnCurrent = 0; public:CConcreteIterator(CConcreteAggregate * pAggregate);void * First();void * Next();BOOL IsDone();void * CurrentItem(); };Iterator.CPP #include "stdafx.h" #include "Iterator.h"CConcreteAggregate::CConcreteAggregate() {mpItems.clear(); }void CConcreteAggregate::Clear() {for each(auto i in mpItems) {delete i;} }Iterator * CConcreteAggregate::CreateIterator() {return new CConcreteIterator(this); }void CConcreteAggregate::Insert(void * const pNode) {mpItems.push_back(pNode); } void CConcreteAggregate::Remove(void * const pNode) {mpItems.remove(pNode); }CConcreteIterator::CConcreteIterator(CConcreteAggregate * pAggregate) {mpAggregate = pAggregate;mnCurrent = 0; }void * CConcreteIterator::First() {return mpAggregate->mpItems.size() == 0 ? NULL :*(mpAggregate->mpItems.begin()); } void * CConcreteIterator::Next() {if (IsDone()) return NULL;int nSubscript = 0;mnCurrent++;for each(auto i in mpAggregate->mpItems) {if (nSubscript++ == mnCurrent + 1) {return i;}} } BOOL CConcreteIterator::IsDone() {return mnCurrent >= mpAggregate->mpItems.size(); } void * CConcreteIterator::CurrentItem() {int nSubscript = 0;for each(auto i in mpAggregate->mpItems) {if (nSubscript++ == mnCurrent) {return i;}}return NULL; }#pragma once #include "stdafx.h" #include "Iterator.h" #include<string> #include<iostream> using namespace std;int main() {CConcreteAggregate *pA = new CConcreteAggregate();pA->Insert(new string("node-1"));pA->Insert(new string("node-2"));string * pStr = new string("node-3");pA->Insert(pStr);Iterator *pIteratorA = new CConcreteIterator(pA);while (!pIteratorA->IsDone()) {cout << *((string*)pIteratorA->CurrentItem()) << endl;pIteratorA->Next();}pA->Remove(pStr);Iterator *pIteratorB = pA->CreateIterator();while (!pIteratorB->IsDone()) {cout << *((string*)pIteratorB->CurrentItem()) << endl;pIteratorB->Next();}pA->Clear();delete pIteratorA;delete pIteratorB;delete pA;delete pStr;getchar();return 0; }

總結(jié)

以上是生活随笔為你收集整理的设计模式复习-迭代器模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。