C++ 传递一个向量<vector<STRUCT>> 进行修改
Posted
技术标签:
【中文标题】C++ 传递一个向量<vector<STRUCT>> 进行修改【英文标题】:C++ Passing a vector<vector<STRUCT> > for modifying 【发布时间】: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<vector<foobar> > vector2D(3,vector<foobar>(3));
谢谢,在我的正常用例中,向量在运行时初始化,所以我需要循环。
【参考方案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);
【讨论】:
以上是关于C++ 传递一个向量<vector<STRUCT>> 进行修改的主要内容,如果未能解决你的问题,请参考以下文章