不能直接std 的迭代器代替麼。
iterator:定義迭代器訪問和遍歷元素的介面;
concreteiterator:實現具體的迭代器;
aggregate:定義的容器,建立相應迭代器物件的介面;
concreteaggregate:具體的容器實現建立相應迭代器的介面,該操作返回concreteiterator的乙個適當的例項。
然後aggregate中加入iterator的物件這樣就可以訪問容器的方法了實現遍歷。
1.迭代抽象:訪問乙個聚合物件的內容而無需暴露它的內部表示。
2.迭代多型:為遍歷不同的集合結構提供乙個統一的介面,從而支援同樣的演算法在不同的集合結構上進行操作。
3.迭代器的健壯性考慮:遍歷的同時更改迭代器所在的集合結構,會導致問題。
1.訪問乙個聚合物件的內容而無需暴露它的內部表示。
2.支援對聚合物件的多種遍歷。
3.為遍歷不同的聚合結構提供乙個統一的介面(即, 支援多型迭代)。
一 簡單實現:
/*
迭代器模式:提供一種方法順序訪問乙個聚合物件中個各個元素,而不暴露該對像的內部表示.
模式的動機:
(1)乙個聚合物件,如乙個列表(list)或者乙個集合(set),應該提供一種方法來讓別人可以訪問
它的元素,而又不需要暴露它的內部結構。
(2)針對不同的需要,可能還要以不同的方式遍歷整個聚合物件,但是我們並不希望在聚合物件的
抽象層介面中充斥著各種不同遍歷的操作。
(3)怎樣遍歷乙個聚合物件,又不需要了解聚合物件的內部結構,還能夠提供多種不同的遍歷方式,
這就是迭代器模式所要解決的問題。
created by phoenix_fulima
*/
#include #include using namespace std;
/* object可以是任意型別的變數 */
typedef int object;
class iterator
; class concreteaggregate
object& operator(int index)
int size()
};
class concreteiterator:public iterator
virtual object begin()
virtual void next()
virtual object end()
virtual object current()
virtual bool isdone()
};
int main()
cout<二,使用模版
#include"stdafx.h"
#include#include #include template class songsbook;
/*** 迭代器類宣告定義 ***/
template class iterator;};
template class ktvcrlor : public iterator
virtual item* first();
virtual item* next();
virtual item* currentitem();
virtual bool isdone();
private:
songsbook* songsbook;
int index;
};// --- 成員函式實現 ---
template item* ktvcrlor::first()
template item* ktvcrlor::next()
templateitem* ktvcrlor::currentitem()
template bool ktvcrlor::isdone()
/*** 聚類宣告定義 ***/
templateclass aggregate
; virtual iterator* createiterator() = 0;
virtual ~aggregate() {};
};templateclass songsbook : public aggregate;
void addsong(item* song);
int count();
virtual iterator* createiterator();
item* operator(int index);
private:
std::vectorsongs;
};// --- 成員函式實現 ---
templateint songsbook::count()
templatevoid songsbook::addsong(item* song)
templateiterator* songsbook::createiterator()
templateitem* songsbook::operator(int index)
int main()
system("pause");
}
C 設計模式 迭代器模式
迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式結構圖 iterator迭代器抽象類 class iterator public virtual object first 0 virtual object next 0 virtual ...
C 設計模式 迭代器模式
迭代器模式 提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的結構 每一種資料結構 包括自定義 遍歷自身內部的資料方式都是不同的。但是我們又希望和常規的遍歷方式一樣呼叫,就如for和foreach一樣遍歷。想要以相同的方式遍歷不同型別的聚合物件,首先就要有乙個相同的介面方法來統一獲取,...
設計模式 C 迭代器模式
sejimoshi.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include include include using namespace std class student long getid intgetage void setname string name void...