从对象中获取项目集合的最佳实践?

Pol*_*878 1 c++ oop

我正在专门处理C++,但这确实与语言无关.

只是为了给出问题的一些背景...我有一个基于树/图的结构,其中每个节点都包含多个项的集合.

我有一个类封装了一些通用集合(list,map,vector,LinkedList,等等).我希望能够以最有效的方式从该集合中获取所有项目,而无需客户端编辑私有集合.

这是我所拥有的简化示例:

class MyClass
{
public:
    // Basic constructors and such
    void AddItem(int item) { _myItems->push_back(item); }

private:
    list<int>* _myItems;
};
Run Code Online (Sandbox Code Playgroud)

显然,检索指向_myItems的指针的getter不起作用,因为这将允许客户端编辑_myItems.

尝试1:
我可以创建一个新列表并返回指向该列表的指针......但是我不喜欢这个想法,因为创建和删除的责任现在位于不同的对象中.

尝试2:
我认为最好创建一些CopyTo方法,例如:

void CopyItemsToList(list<int>* inList) { // copy the items to client list }
Run Code Online (Sandbox Code Playgroud)

这样,客户端负责mem管理,并且很容易扩展它以允许更多的数据结构.我对这种方法的关注是成本......列表可能非常大,复制项目的成本可能会很高

尝试3:
只需使用值类型并返回(让复制构造函数处理它),而不是保持指向类中列表的指针.但是,这似乎是性能成本与#2相同......

无论如何,还有其他任何方式去做吗?让我知道你们的想法......谢谢.

Amb*_*ber 6

所述迭代器模式通常被认为以暴露从集合不可知的集合的实际内部表示元素的列表的适当方法.您可以创建迭代器,使其返回只读(const)引用,或者在请求时动态复制项目,而不是复制整个列表.