传递矢量矢量功能

时间:2015-05-25 19:55:04

标签: c++ vector pass-by-reference pass-by-value pass-by-pointer

我有一个接受

的功能
vector<vector<MyClass>> 

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

我原来的方法签名是:

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

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

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

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

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

这是否足够,或者我还需要做类似的事情:

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

有人可以突出显示所有这些之间的内存差异吗?非常感谢!

2 个答案:

答案 0 :(得分:7)

简单地

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

答案 1 :(得分:1)

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