If I have a vector of objects in one class which I want to change in another, I would try and pass all the information by reference.
What exactly do I need to pass by re
You cannot have a vector of references. Vector elements must be copyable and assignable, which references are not. So only the first option is actually an option, but it's spelled std::vector<Object> &
.
Note that v[1]
already returns a reference to the second element, so you can happily pass individual elements by reference.
It is possible to have a vector of reference-wrappers a la std::ref
, but if you don't know what that is, you probably shouldn't be using it at this point.
vector&<object>
is a syntax error. vector<object&>
is invalid, because a vector's value type must be assignable. vector&<object&> blah
is a syntax error.
A reference to a vector is vector<T>&
.
Another option is to pass around iterators instead of containers. This is the approach the standard library takes in <algorithm>
. They are slightly more verbose at the calling site, but they have the advantage that they work for parts of a collection as well as complete collections and decouples the algorithm from the container.
Lastly, of course, it's worth while checking you know your algorithms as there may already be one that does what you want.