传递矢量矢量功能

lot*_*ons 5 c++ vector pass-by-reference pass-by-value pass-by-pointer

我有一个接受a的功能

vector<vector<MyClass>> 
Run Code Online (Sandbox Code Playgroud)

并修改MyClass实例.自从我编写任何C++以来已经很长时间了,我很难记住通过引用而不是通过值传递整个arg的内容.

我原来的方法签名是:

void modifyVectorOfVectors(vector<vector<MyClass> > vec) { ... }
Run Code Online (Sandbox Code Playgroud)

我想让这个内存有效,所以我最初改为:

void modifyVectorOfVectors(vector<vector<MyClass*> > vec) { ... }
Run Code Online (Sandbox Code Playgroud)

然后我意识到这意味着我的vec值仍然会复制所有内部向量.所以我将我的功能签名更改为:

void modifyVectorOfVectors(vector<vector<MyClass*> >* vec) { ... }
Run Code Online (Sandbox Code Playgroud)

这是否足够,或者我还需要做以下事情:

void modifyVectorOfVectors(vector<vector<MyClass*>* >* vec) { ... }
Run Code Online (Sandbox Code Playgroud)

有人可以强调所有这些之间的记忆差异吗?非常感谢!

KAB*_*ult 12

只是

void modifyVectorOfVectors( vector< vector< MyClass > >& vec) { ... }
Run Code Online (Sandbox Code Playgroud)


Ste*_*hen 3

  1. void modifyVectorOfVectors(vector<vector<MyClass> > vec) { ... } 复制具有内部向量所有元素的外部向量
  2. void modifyVectorOfVectors(vector<vector<MyClass*> > vec) { ... } 复制具有所有内部向量的外部向量,其中包含 MyClass 的所有指针
  3. void modifyVectorOfVectors(vector<vector<MyClass*>* > vec) { ... } 复制具有内部向量的所有指针的外部向量,并且内部向量保存 MyClass 的指针
  4. void modifyVectorOfVectors(vector<vector<MyClass*> *> vec*) { ... } 复制外部向量的指针,该外部向量具有内部向量的所有指针,并且内部向量保存 MyClass 的指针