c++ - std::vector::reserve 是否重新分配内部数组?

标签 c++ stl vector

我有一个函数接受 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/

相关文章:

c++ - 函数中的默认 `const vector<int> &id` 参数

c++ - 访问 vector 容器的元素时发生运行时错误

C++ Unix 多线程 "under the hood"会发生什么?

指向成员函数的 C++ 指针,替代 __closure

c++ - std::unordered_set 和 std::vector 之间的多态性?

c++ - std::size_t 或 std::vector<Foo>::size_type?

c++ - 每个C++ STL集合操作的算法效率

c++ - 像数组一样访问 c++ 队列元素

C++ - 将 ASCII 字符数组中可能的数值转换为字符的最简单方法

java - java中的二维 vector 在java中得到模糊的输出