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

And*_*dry 7 c++ containers return

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

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

Arm*_*yan 6

最好的做法是使用迭代器设计模式并返回迭代器

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

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

  • 在您的情况下,您返回的迭代器是来自现有STL类的迭代器.返回自己的迭代器的用户应该从std :: iterator派生它们的类,以便它获取属性和typedef.如果迭代器是指针,则无需这样做. (2认同)