C ++传递vector <vector <struct>&gt;用于修改</vector <struct>

时间:2011-03-24 00:54:29

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

让我说我有一个

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;

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

这甚至可能吗?

2 个答案:

答案 0 :(得分:7)

是的,这是可能的。您只需要将其作为非const引用传递。类似的东西:

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结构实现复制构造函数。

答案 1 :(得分:0)

当然,只需通过引用传递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);