我有一个函数接受 int *
并修改传入的数组。我提前知道它将访问多少元素。假设这是 m
值。
如果我在 reserve(m)
上调用 vector<int>
然后将指针 data()
发送到该函数,会发生什么情况?
我的猜测是,如果我随后从指针访问数据,就好像它是一个数组,那么这样做可能会起作用,但是如果我尝试使用 operator []
从 vector 中检索该数据 vector 的大小不会更新,我会有问题。所以我应该只使用 resize(m)
来做到这一点。
最佳答案
不要这样做;这是未定义的行为,根本不允许。相反,你应该做几乎同样昂贵的 resize()
操作然后传递data()
指针。
唯一增加的成本来自内存清零。不幸的是,没有标准的库容器可以处理未初始化的动态存储,而不是std::unique_ptr<int[]>(new int[m])
。 .不过,归零的成本非常小(但它在概念上可能很烦人,因为您知道您将要覆盖数据)。我想在高性能上下文中,您可以尝试使用唯一指针方法。 (请注意,基本类型的数组- new[]
通常完全等同于 ::operator new()
或 malloc()
)。
关于c++ - std::vector::reserve 是否重新分配内部数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9555728/