gpt4 book ai didi

c++ - 函数退出后 vector 数据消失

转载 作者:行者123 更新时间:2023-11-28 05:28:16 25 4
gpt4 key购买 nike

我有一个名为 VEC 的自定义 vector 类和一个名为 Data 的类,它包含一个名为 v 的 VEC 的 std::vector。VEC 充当一个非常简单的 vector ,它只存储 4 个值。

vector<VEC> v;

在其他地方,我有两个功能;处理和创建。我的 process() 应该接受一个 Data 对象作为参数,然后改变它的内容。它被声明为

void myClass::process(Data data);

在这个函数中,我创建了一个 VEC 的临时 vector ,然后将其内容推送到数据的 v 中:

VEC v1(1, 1, 1, 1);
VEC v2(2, 2, 2, 2);
VEC v3(3, 3, 3, 3);
vector<VEC> temp;
temp.push_back(v1);
temp.push_back(v2);
temp.push_back(v3);

for (int i = 0; i < 3; i++)
{
data.v.push_back(vtemp[i]);
}
cout << data.v.size() << endl;

如您所料,这会打印出 3。

这就是问题发生的地方。另一个函数 create() 在 vector 数据列表中的每个数据对象上调用 process()。出于测试目的,这个只使用第一个元素。

void myClass::create() {
process(dataList[0]);
cout << dataList[0].v.size() << endl;
}

这是它打印出来的内容

3
0

如您所见,它在 process() 函数中正常工作,但 v vector 似乎在该函数退出后立即自行清空。这是一个问题,因为我需要每个数据对象在调用 process() 之后保存它的新 v 内容。这是怎么回事?

最佳答案

如果你想操纵你的 Data对象,你的 process函数必须这样声明:

void myClass::process(Data& data);

您必须通过引用传递,否则复制 data将在您将其传递给函数时进行。 & 之后的符号 ( Data )在上面的函数原型(prototype)中表示“引用 data 类型的变量 Data 。”

按照您的方式,函数对 data 所做的任何更改将到这个局部变量。因此,更改将在 process 时被销毁。函数退出。

关于c++ - 函数退出后 vector 数据消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com