2011-03-24 82 views
2

让我们说我有一个C++传递一个矢量<矢量<STRUCT>>用于修改

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

所以,总共含有型foobar的的9种元素的3×3向量。

我知道要将“vector2D”传递给函数以修改“vector2D”中的某些值。 例如,如果foobar的包含

struct foobar{ 
     int *someArray; 
     bool someBool; 
} 

我想“的Vector2D”传递给修改的Vector2D这样的功能:

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

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

这甚至可能吗?

+1

FYI:您可以在不环路初始化向量:'矢量<矢量>的Vector2D( 3,vector (3));' – 2011-03-24 00:58:44

+0

谢谢,在我的正常用例中,vector在运行时被初始化,所以我需要循环。 – clasnes 2011-03-24 01:01:17

回答

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结构。

+0

就是这样。非常感谢! – clasnes 2011-03-24 01:02:10

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);