如果你想将数组作为类的成员变量,有两个主要选项:
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/