Consider the piece of code:

```
class Foo
{ // ...
    std::vector<Bar> bars;
};

```

Should I expose the whole container, or should I expose `typedef`'d iterator class and write adaptor methods (`begin()`, `end()`, `size()`, and whatever I need)?

If the answer is *it depends*, how should one make a decision?