8

我有一个接受的函数

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) { ... }

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

4

2 回答 2

17

简单地

void modifyVectorOfVectors( vector< vector< MyClass > >& vec) { ... }
于 2015-05-25T20:00:52.850 回答
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 的指针
于 2015-05-25T20:00:35.290 回答