在很多文章中,我看到術語光標與術語迭代器可互換使用。然而,他們被視爲同一事物似乎並不正確。光標與迭代器模式
對我來說,迭代器允許在不知道容器本身的情況下迭代容器。另一方面,遊標允許迭代容器,但具有特定於容器類型的實現細節,因此它確實保留對容器的引用。另外,遊標的界面反映了容器類型的界面,如門面模式。
這裏是什麼,我會考慮光標的例子:
class Book {};
class Library
{
std::vector<Book> books;
bool IsBookHardCover(int bookIndex);
bool IsBookSoftCover(int bookIndex);
BookCursor GetFirstBook();
};
class BookCursor
{
std::vector<Book>& books;
int currentBook;
bool IsHardCover();
bool IsSoftCover();
void Next();
};
所以基本上我根據他們的依賴或者他們遍歷容器的知識迭代器和光標之間的區別。這是一個合適的區別?如果不是,那麼您會如何考慮我在上面的代碼示例中列出的設計模式?
請注意,我上面的代碼示例應該被視爲僞代碼,因爲我沒有編譯它,它也缺乏所需的構造函數。
在許多情況下,迭代器確實知道它正在迭代的容器。差異似乎在客戶端代碼中,其中迭代器只會公開迭代器接口,而您的遊標會公開自定義容器的一些特定實現細節。 –
你從哪裏得到這個「光標」的定義? –
你的光標模式實現了什麼,通過取消引用迭代器無法實現?另外,迭代器實現(必要時)必須知道它正在迭代的容器的某些內容 - 但是對迭代器的操作只需要知道迭代器的功能,而不需要了解底層容器。 –