光标与迭代器模式

voi*_*ter 4 c++ design-patterns cursor

在许多文本中,我已经看到术语游标与术语迭代器可互换使用.但是,它们被视为同一件事似乎是不对的.

对我来说,迭代器允许在不知道容器本身的情况下迭代容器.另一方面,游标也允许迭代容器,但具有特定于容器类型的实现细节,因此它确实保持对容器的引用.此外,游标的界面镜像容器类型的界面,如外观模式.

这是我认为光标的一个例子:

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();
};
Run Code Online (Sandbox Code Playgroud)

所以基本上我根据它们的依赖性或它们迭代的容器的知识来区分迭代器和游标.这是一个适当的区别吗?如果没有,您会考虑我在上面的代码示例中概述的设计模式?

请注意,上面的代码示例应该被视为伪代码,因为我没有编译它,它也缺少所需的构造函数.

def*_*ode 6

您描述的Cursor模式是两种模式的组合:Proxy和Iterator.标准库不同的原因是为了避免不必要地耦合这两种行为.