多くの文章で、イテレータという用語と同じ意味で使用されているカーソルという言葉を見ました。しかし、彼らは同じこととして扱われているようには思われません。カーソルとイテレータのパターン
私にとって、イテレータは、コンテナ自体を知らなくてもコンテナの反復を可能にします。一方、カーソルは、コンテナの反復も可能にしますが、コンテナのタイプに固有の実装の詳細があるため、コンテナへの参照を保持します。さらに、カーソルのインタフェースは、ファサードパターンのようなコンテナのインタフェースを反映しています。だから、基本的に、私は彼らの依存関係や、彼らが反復コンテナの知識に基づいてイテレータとカーソル間の区別をし
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();
};
:ここ
は、私は、カーソルを検討するものの一例です。これは適切な区別ですか?そうでない場合は、上のコード例で概説した設計パターンをどう思いますか?上記の私のコード例は、私がそれをコンパイルしなかったので擬似コードとして扱われなければならず、また、必要なコンストラクタもないことに注意してください。
多くの場合、イテレータは反復処理中のコンテナを認識します。違いはクライアントコードのように見えます。クライアントコードでは、イテレータはイテレータインターフェイスのみを表示し、カーソルはカスタムコンテナの特定の実装の詳細を公開します。 –
この "カーソル"の定義はどこで手に入りましたか? –
カーソルパターンは、イテレータを逆参照することによっては達成できないものは何ですか?さらに、イテレータ実装(必要に応じて)は反復処理中のコンテナに関する情報を知っていなければなりませんが、反復子の操作はイテレータの機能を知るだけで、下位のコンテナは何も知りません。 –