私は特にC++を扱っていますが、これは本当に言語に依存しません。オブジェクトからアイテムのコレクションを取得するベストプラクティス?
問題にいくつかのコンテキストを与える...私は、各ノードが複数のアイテムの集合を保持するツリー/グラフベースの構造を持っています。
私はいくつかの一般的なコレクション(リスト、マップ、ベクトル、LinkedList、何でも)をカプセル化するクラスを持っています。クライアントがプライベートコレクションを編集することなく、できるだけ効率的な方法でコレクションからすべてのアイテムを取得できるようにしたい。だから、明らかに
class MyClass
{
public:
// Basic constructors and such
void AddItem(int item) { _myItems->push_back(item); }
private:
list<int>* _myItems;
};
これは、クライアントが_myItemsを編集することができますように動作しない_myItemsへのポインタを取得し、ゲッター:
は、ここで私が持っているものの簡単な例です。
試み1:
私は新しいリストを作成して、代わりにその1へのポインタを返すことができます...しかし、私が作成し、現在、削除の責任として、そのアイデア好きではない別のオブジェクトとうそ。
試み2:私はそれのようないくつかのCopyToのメソッドを作成するのがベストだろうと思ってい
:
void CopyItemsToList(list<int>* inList) { // copy the items to client list }
この方法では、クライアントは、MEM管理の世話をする、拡張するのは簡単ですこれにより、より多くのデータ構造が可能になります。このアプローチの私の関心は、リストは非常に大きなものとなります...コストで、アイテムをコピーするコストが
試み3大得ることができます:
代わりのクラスのリストへのポインタを保持し、値の型を使用してそれを返します(コピーコンストラクタに処理させる)。しかし、これはパフォーマンスのコストが#2と同じように思えます...
とにかく、これについて他の方法はありますか?皆さんの考えを教えてください...ありがとう。
const_teratorそれで、クライアントは要素自体を変更することはできません。 – Eugene
修正;更新された答えは、それについてもう少し明白になります。 – Amber
Meh。大量のデータを考慮して多くの作業が行われているようなサウンドは、既に繰り返し処理できるリストの周りに構築されています。 – Kieveli