【问题标题】:C++ Passing a vector<vector<STRUCT> > for modifyingC++ 传递一个向量<vector<STRUCT>> 进行修改
【发布时间】:2011-07-21 18:33:52
【问题描述】:

假设我有一个

vector<vector<foobar> > vector2D(3);
for(int i=0;i<3;i++)
   vector2D[i].resize(3);

所以,一个 3x3 的向量总共包含 9 个 foobar 类型的元素。

我知道想将“vector2D”传递给一个函数来修改“vector2D”中的一些值。 例如,如果 foobar 包含

struct foobar{
       int *someArray;
       bool someBool;
}

我想将“vector2D”传递给一个修改vector2D的函数,如下所示:

vector2D[0][0].someArray = new int[100];
vector2D[0][0].someArray[49] = 1;

函数不应返回任何内容(引用调用)。

这可能吗?

【问题讨论】:

  • 仅供参考:您可以在没有循环的情况下初始化向量:vector&lt;vector&lt;foobar&gt; &gt; vector2D(3,vector&lt;foobar&gt;(3));
  • 谢谢,在我的正常用例中,向量在运行时初始化,所以我需要循环。

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


【解决方案1】:

是的,这是可能的。您只需要将它作为非常量引用传递。比如:

void ModifyVector( vector< vector< foobar > > & v )
{
    v[0][0].someArray = new int[100];
    v[0][0].someArray[49] = 1;
}

vector<vector<foobar> > vector2D(3);
ModifyVector( vector2D );

进一步说明:如果您在向量中使用 foobar 结构,您可能应该为它实现复制构造函数。

【讨论】:

    【解决方案2】:

    当然,只需通过引用传递你的 vector2D:

    void foo(vector<vector<foobar> >& v)
    {
        v[0].resize(3);
        v[0][0].someArray = new int[100];
        v[0][0].someArray[49] = 1
    }
    

    并将其称为:

    vector<vector<foobar> > vector2D(3);
    foo(vector2D);
    

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 2017-11-30
      • 1970-01-01
      • 2019-08-12
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      相关资源
      最近更新 更多