我正在开发一个类,它充当另一个类的容器。在容器类中,我必须实现一个方法来获取集合中的所有元素。我的容器类使用std :: deque。
我应该返回对双端队列的引用吗? 我应该寄回一副双端队列吗? (我的上帝告诉我这不是答案......)) 我应该退回阵列吗? ... 在这种情况下,最佳做法是什么? 谢谢
答案 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返回。