gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:51:04 24 4
gpt4 key购买 nike

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

A:在堆上分配内存

class X
{
int * arr;
public:
UnionFind(int numNodes)
{
arr = new int[numNodes];
}
}

B:使用 vector

class X
{
vector <int> arr;
public:
UnionFind(int numNodes)
{
arr.resize(numNodes);
}
}

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

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

最佳答案

当您在动态分配的 C 样式数组和 std::vector<> 之间做出选择时, 选择 vector 。

  • 这是安全的,为您完成所有的分配/重新分配/调整大小
  • 它使您的代码更灵活、可读性更强且更易于维护
  • 它在大多数用例中都非常高效
  • 它提供显式迭代器和大量成员函数,包括 size()
  • 许多实现会在 Debug模式下进行索引检查以捕获越界错误

请注意 std::array存在于大多数情况下 C 数组更可取(例如,当首选堆栈上的分配时)

关于c++ - 对于类中动态大小的数组,std::vector 是否优于堆数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24133239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com