C ++设计容器和管理列表返回

时间:2010-11-25 14:50:56

标签: c++ containers return

我正在开发一个类,它充当另一个类的容器。在容器类中,我必须实现一个方法来获取集合中的所有元素。我的容器类使用std :: deque。

我应该返回对双端队列的引用吗? 我应该寄回一副双端队列吗? (我的上帝告诉我这不是答案......)) 我应该退回阵列吗? ... 在这种情况下,最佳做法是什么? 谢谢

3 个答案:

答案 0 :(得分:6)

最佳做法是使用iterator design pattern并返回迭代器

就你的具体例子而言,我会做这样的事情:

class myContainer
{
public: 
   typedef std::deque<X> actual_container_type;
   typedef actual_container_type::iterator iterator;
   typedef actual_container_type::const_iterator const_iterator;
   //etc...

   iterator begin() {return cont.begin(); }
   const_iterator begin() const {return cont.begin(); }
   iterator end() {return cont.end(); }
   const_iterator end() const {return cont.end(); }

   //you may choose to also provide push_front and push_back... or whatever :)


  private:
     actual_container_type cont;
}

答案 1 :(得分:0)

只需打包begin()end()size()operator[]即可。

答案 2 :(得分:0)

迭代器模式很不错,但是您公开了实现细节。它可以被滥用并打破你的班级内部。这些都是API的坏事,你应该设计防范这个。

这听起来很浪费,但最安全的方法是将您的集合副本作为std :: vector返回。