C++传递一个矢量<矢量>用于修改
问题描述:
让我们说我有一个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;
函数不应该返回任何东西(通过引用调用)。
这甚至可能吗?
答
是的,这是可能的。您只需将其作为非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
答
当然,只是通过引用传递您的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);
FYI:您可以在不环路初始化向量:'矢量>的Vector2D( 3,vector(3));' –
2011-03-24 00:58:44
谢谢,在我的正常用例中,vector在运行时被初始化,所以我需要循环。 – clasnes 2011-03-24 01:01:17