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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式-行为-迭代器

發布時間:2025/3/21 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-行为-迭代器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#pragma once#ifndef ITERATOR_H #define ITERATOR_H #include <vector> #include <iostream> using namespace std;class Iterater; // 容器的抽象基類 template <class DATA> class Aggregate { public: virtual ~Aggregate(){} virtual int GetSize() = 0; virtual DATA GetItem(int nIndex) = 0; }; // 迭代器的抽象基類 class Iterater { public: virtual ~Iterater(){} virtual Iterater& operator++() = 0;virtual Iterater& operator++(int) = 0; private: }; // 一個具體的容器類,這里是用數組表示 template <class DATA> class ConcreateIterater;template <class DATA=int, typename MAX_SIZE=1024> class ConcreateAggregate : public Aggregate<DATA> { public: ConcreateAggregate(); virtual ~ConcreateAggregate(); virtual ConcreateIterater<DATA>& begin();virtual ConcreateIterater<DATA>& end();virtual void push_back(DATA dt);virtual DATA pop_back();virtual int GetSize();virtual DATA GetItem(int nIndex);DATA operator[](size_t nIndex){if (nIndex >= m_aData.size()){cout<<"index out of range"<<endl;return -1;}return m_aData[nIndex];}private:ConcreateIterater<DATA> *m_begin;ConcreateIterater<DATA> *m_end;vector<DATA> m_aData; }; // 訪問ConcreateAggregate 容器類的迭代器類 template <class DATA> class ConcreateIterater : public Iterater { public: ConcreateIterater(Aggregate<DATA>* pAggregate): m_pConcreateAggregate(pAggregate) , m_nIndex(0) { } virtual ~ConcreateIterater(){} ConcreateIterater& operator*(){return *this;}friend ostream &operator<<(ostream &os,const ConcreateIterater &itr){os << itr.m_pConcreateAggregate->GetItem(itr.m_nIndex);return os;}friend istream &operator>>(istream &is,ConcreateIterater &itr){int tmp = itr.m_pConcreateAggregate->GetItem(itr.m_nIndex);is >> tmp;return is;}virtual Iterater& operator++()//for ++itr{m_nIndex++;return *this;}virtual Iterater& operator++(int) //for itr++{ConcreateIterater *tmp = this;m_nIndex++;return *tmp;}bool operator==(ConcreateIterater itr){return this->m_nIndex == itr.m_nIndex;}bool operator!=(ConcreateIterater itr){return this->m_nIndex != itr.m_nIndex;}template <class DATA, int MAX_SIZE> friend class ConcreateAggregate; private: Aggregate<DATA> *m_pConcreateAggregate; int m_nIndex; }; #endif
#include "StdAfx.h" #include "iterator_impl.h"#include <iostream> template <class DATA, int MAX_SIZE> ConcreateAggregate<DATA, MAX_SIZE>::ConcreateAggregate() :m_begin(NULL) ,m_end(NULL) { } template <class DATA, int MAX_SIZE> ConcreateAggregate<DATA, MAX_SIZE>::~ConcreateAggregate() { } template <class DATA, int MAX_SIZE> ConcreateIterater<DATA>& ConcreateAggregate<DATA, MAX_SIZE>::begin() {if (m_begin == NULL){m_begin = new ConcreateIterater<DATA>(this);m_begin->m_nIndex = 0;}return *m_begin; } template <class DATA, int MAX_SIZE> ConcreateIterater<DATA>& ConcreateAggregate<DATA, MAX_SIZE>::end() {if (m_end == NULL){m_end = new ConcreateIterater<DATA>(this);m_end->m_nIndex = m_aData.size();}return *m_end; } template <class DATA, int MAX_SIZE> void ConcreateAggregate<DATA, MAX_SIZE>::push_back(DATA dt) {m_aData.push_back(dt); } template <class DATA, int MAX_SIZE> DATA ConcreateAggregate<DATA, MAX_SIZE>::pop_back() {DATA tmp = m_aData.back();m_aData.pop_back();return tmp; } template <class DATA, int MAX_SIZE> int ConcreateAggregate<DATA, MAX_SIZE>::GetSize() { return m_aData.size(); } template <class DATA, int MAX_SIZE> DATA ConcreateAggregate<DATA, MAX_SIZE>::GetItem(int nIndex) { if (nIndex < m_aData.size()) { return m_aData[nIndex]; } return -1; }
// Iterator.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h"#include "iterator_impl.h" #include "iterator_impl.cpp" #include <stdlib.h> #include <memory> #include <iostream> using namespace std; //提供一種方法順序訪問一個聚合對象中各個元素,,而又不需暴露該對象的內部表示. typedef ConcreateAggregate<> dmVector; typedef ConcreateAggregate<int,64> mVector; typedef ConcreateIterater<int> mIterator; int _tmain(int argc, _TCHAR* argv[]) {mVector vtdata;vtdata.push_back(1);vtdata.push_back(2);vtdata.push_back(3);vtdata.push_back(4);for (mIterator itr = vtdata.begin();itr != vtdata.end(); itr++) { std::cout << *itr <<" "; } cout<<endl;for (int i=0;i<vtdata.GetSize();++i){std::cout<<vtdata[i]<<" ";}cout<<endl;system("pause");return 0; }

總結

以上是生活随笔為你收集整理的设计模式-行为-迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。

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