For a long time I was using std::vector and std::shared_ptr hand in hand. Recently I started using std::shared_ptr when
std::vector
std::shared_ptr
if you insist on keeping std::vector you can try to encapsulate it into a handle-body idiom structure.
this allows you to keep a non const shared pointer in a const handle.
const