我应该在C++中公开迭代器和适配器方法或整个容器吗?

And*_*w T 2 c++ containers stl interface

考虑一下代码:

class Foo
{ // ...
    std::vector<Bar> bars;
};
Run Code Online (Sandbox Code Playgroud)

我应该暴露整个容器,或者我应该公开typedef倒是迭代器类,并用适配器的方法(begin(),end(),size(),和任何我需要)?

如果答案取决于,应该如何做出决定?

Geo*_*che 8

除非绝对需要公开容器,否则只暴露迭代器或迭代器范围(以及typedefed迭代器类型).

这样可以避免在更改实现细节时破坏其他代码,并遵循信息隐藏/封装的指导原则.