Passing vector of vectors to function

lots_of_questions picture lots_of_questions · May 25, 2015 · Viewed 7.3k times · Source

I have a function which accepts a

vector<vector<MyClass>> 

and modifies the MyClass instances. It's been a long time since I've written any C++ and I'm having difficulty remembering what is sufficient here for passing the entire arg by reference instead of by value.

My original method signature was:

void modifyVectorOfVectors(vector<vector<MyClass> > vec) { ... }

I want to make this memory efficient so I originally changed this to:

void modifyVectorOfVectors(vector<vector<MyClass*> > vec) { ... }

Then I realized that this would mean that my vec value would still make copies of all the inner vectors. So I changed my function signature to:

void modifyVectorOfVectors(vector<vector<MyClass*> >* vec) { ... }

Is this sufficient, or do I also need to do something like:

void modifyVectorOfVectors(vector<vector<MyClass*>* >* vec) { ... }

Could someone highlight the memory differences between all of these? Thanks a lot!

Answer

KABoissonneault picture KABoissonneault · May 25, 2015

Simply

void modifyVectorOfVectors( vector< vector< MyClass > >& vec) { ... }