reserve()-空向量上的data()技巧-正确吗?

问题描述 投票:0回答:1

[我们知道,std :: vector在像std::vector vect(n)empty_vect.resize(n)那样初始化时,不仅分配了所需的内存量,而且还使用默认值对其进行了初始化(即调用默认构造函数)。这会导致不必要的初始化,尤其是当我有一个整数数组并且我想用一些不能通过任何向量构造函数提供的特定值来填充它时。

另一方面,容量是像empty_vect.reserve(n)一样在调用中分配内存,但是在这种情况下vector仍然为空。因此,size()返回0empty()返回trueoperator[]生成异常。

现在,请查看代码:

{ // My scope starts here...

    std::vector<int> vect;
    vect.reserve(n);
    int *data = vect.data();

    // Here I know the size 'n' and I also have data pointer so I can use it as a regular array.
    // ...

} // Here ends my scope, so vector is destroyed, memory is released.

问题是“是否可以将其用作数组”是一个安全的假设吗?

不管有什么争论,我只是对以上问题感到好奇。无论如何,关于参数:

  1. 它分配内存并在函数返回时自动释放它
  2. 代码不会执行不必​​要的数据初始化(在某些情况下可能会影响性能)
c++ c++11 stl
1个回答
1
投票

不,您不能使用它。

© www.soinside.com 2019 - 2024. All rights reserved.