Getting Record entries
The obvious downside of your current approach is that you do a lot potentially unnecessary copying. One common solution is to return (const) iterators to the entries, i.e.,:

class Record
{
    public:
        // ...

       auto cbegin() const { return entries.cbegin(); }
       auto cend() const { return entries.cend(); }

       // Perhaps similar methods for getting non-const iterators ...
};


This solution allows you to use e.g., standard algorithms on the entries, but you can't manipulate the underlying range from the outside (due to const-ness).

To support your earlier use case, you can still do std::vector&lt;std::string&gt; res(r.cbegin(), r.cend()); if you wish, where r is an object of type Record.