对于类中动态大小的数组,std :: vector是否优先于堆数组?

111*_*001 2 c++ arrays vector

如果要将数组作为类的成员变量,则有两个主要选项:

答:在堆上分配内存

class X
{
    int * arr;
public:
    UnionFind(int numNodes)
    {
        arr = new int[numNodes];
    }
}
Run Code Online (Sandbox Code Playgroud)

B:使用矢量

class X
{
    vector <int> arr;
public:
    UnionFind(int numNodes)
    {
        arr.resize(numNodes);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下哪一项是首选方法?我知道堆分配数组的一个缺点是你需要自己删除内存.

作为一个小问题,如果在堆上创建X的对象vector <int> arr也在对象内的堆中?如果是这样,为什么vector <int> arr不手动需要删除?

qua*_*dev 6

当您可以在动态分配的C样式数组和a之间进行std::vector<>选择时,请选择向量.

  • 这是安全的,为你做所有的alloc/realloc/resizing
  • 它使您的代码更灵活,更易读,更易于维护
  • 在大多数用例中它非常有效
  • 它提供了显式迭代器和大量的成员函数,包括 size()
  • 许多实现将在调试模式下进行索引检查以捕获越界错误

请注意,std::array大多数情况下都存在C阵列(例如,首选在堆栈上进行分配时)