Passing vector of vectors to function

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!

3

2 Answers

Simply

void modifyVectorOfVectors( vector< vector< MyClass > >& vec) { ... }
  1. void modifyVectorOfVectors(vector<vector<MyClass> > vec) { ... }Copy external vector which has all elements of inner vector
  2. void modifyVectorOfVectors(vector<vector<MyClass*> > vec) { ... }Copy external vector which has all inner vectors which holds all pointers of MyClass
  3. void modifyVectorOfVectors(vector<vector<MyClass*>* > vec) { ... }Copy external vector which has all pointers of inner vectors and and inner vectors holds pointers of MyClass
  4. void modifyVectorOfVectors(vector<vector<MyClass*> *> vec*) { ... }Copy pointer of external vector which has all pointers of inner vectors and and inner vectors holds pointers of MyClass

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like