C++传递向量<向量 >用于修改

发布于 2024-10-25 20:24:54 字数 527 浏览 2 评论 0 原文

假设我有一个

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

So,一个 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;

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

这可能吗?

let's say I have a

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

So, a 3x3 vector containing 9 elements of type foobar in total.

I know want to pass "vector2D" to a function to modify some values in "vector2D".
For example, if foobar contains

struct foobar{
       int *someArray;
       bool someBool;
}

I want to pass "vector2D" to a function that modifies vector2D like this:

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

The function shouldn't return anything (call by reference).

Is this even possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

递刀给你 2024-11-01 20:24:54

是的,这是可能的。您只需将其作为非常量引用传递即可。类似的:

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

Yes, it's possible. You just need to pass it in as a non-const reference. Something like:

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

One further note: you probably should implement the copy constructor for your foobar struct if you're using it within a vector.

昵称有卵用 2024-11-01 20:24:54

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

Sure, just pass your vector2D by reference:

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

and call it as:

vector<vector<foobar> > vector2D(3);
foo(vector2D);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文