-1

如果我使用下面的代码将元素添加到向量中,那么在我调用 foo 时,vec 的元素(自动变量)已被销毁,因为它们的创建范围结束了。

std::vector<A> vec;
for (int i = 0; i < n; i++) {
  A a;
  vec.push_back(a);
}

foo(vec);

我现在的问题是教科书对此类问题的解决方案是什么

4

3 回答 3

2

不,中的元素vec将是a.

vec但是,如果要使用operator[]或使用,则需要分配大小vec.push_back()

for (int i = 0; i < n; i++) vec.push_back(A());

编辑(问题更改后):

即使push_back()将其参数作为参考,在内部它也会复制它。它通过引用接受它的参数,以避免在将副本存储在内部之前进行不必要的复制。

于 2012-07-11T08:53:00.040 回答
0

不要担心堆栈变量。当您在 std::vector 中推送值时,此容器会创建变量的堆副本。因此,当您在范围内时,您的所有变量都将存在。

于 2012-07-11T08:55:52.537 回答
0

您可以将变量定义为全局变量,并在循环中让该变量中的值然后推回

于 2012-07-11T09:45:13.160 回答