我有一个函数,它接受一个int *并修改传入的数组。我提前知道它将访问多少个元素。让我们说这就是m价值观。
如果我调用reserve(m)avector<int>然后将指针发送data()到函数会发生什么?
我的猜测是,如果我随后从指针访问数据,就好像它是一个数组一样,这样做可能会奏效,但是如果我尝试使用向量operator []的大小从向量中检索此数据,则不会更新,我会有问题。所以我应该只是resize(m)用来做这个。
不要这样做;这是未定义的行为,根本不允许。相反,您应该执行几乎同样昂贵的resize()操作,然后传递data()指针。
唯一增加的成本来自将内存清零。不幸的是没有标准库容器手柄未初始化的动态存储短std::unique_ptr<int[]>(new int[m])。不过,清零的成本非常小(但它可能在概念上很烦人,因为您知道将要覆盖数据)。我想在高性能上下文中,您可以尝试使用唯一指针方法。(请注意,new[]基本类型的数组通常完全等同于::operator new()或malloc())。