【问题标题】:Passing vector of vectors to function将向量的向量传递给函数
【发布时间】:2015-08-07 08:08:48
【问题描述】:

我有一个接受 a 的函数

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

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

【问题讨论】:

  • 你为什么不直接引用向量的向量呢?这种方式没有内存泄漏
  • 使用 typedef 可能会更清楚
  • 如果使用现代 c++ 那么using 会更好:)

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


【解决方案1】:

简单

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

【讨论】:

    【解决方案2】:
    1. void modifyVectorOfVectors(vector&lt;vector&lt;MyClass&gt; &gt; vec) { ... } 复制包含内部向量所有元素的外部向量
    2. void modifyVectorOfVectors(vector&lt;vector&lt;MyClass*&gt; &gt; vec) { ... } 复制具有所有内部向量的外部向量,其中包含 MyClass 的所有指针
    3. void modifyVectorOfVectors(vector&lt;vector&lt;MyClass*&gt;* &gt; vec) { ... } 复制具有所有内部向量指针的外部向量,并且内部向量包含 MyClass 的指针
    4. void modifyVectorOfVectors(vector&lt;vector&lt;MyClass*&gt; *&gt; vec*) { ... } 外部向量的复制指针包含所有内部向量的指针,并且内部向量包含 MyClass 的指针

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多