我有一个带有私有属性的类,它是一个向量。我在构造函数中将其初始化为null,如下所示:
Graph(int NumberOfVertices):vertices(NumberOfVertices),
edges(0),
adjacency_list(NULL){};
向量是
std::vector<Edge *> adjacency_list;
该程序不起作用,但我不确定这是错误,是否正确初始化我正在做的向量?
答案 0 :(得分:2)
你没有初始化类中的空向量字段,向量的默认构造函数就足够了。但是,如果您已经知道元素的数量,则可以在构造函数中调整它的大小。
Graph(int NumberOfVertices):vertices(NumberOfVertices),
edges(0) { adjacency_list.resize(vertices)};
这绝对不正确:
adjacency_list(NULL) // this will evaluate to vector(0)
// and your vector has 0 size
可能你已经把矢量存储的指针与矢量本身混淆了。使用NULL初始化类向量将计算为0大小的向量。 无需初始化作为类成员的空vector
实例:
默认初始化在以下三种情况下执行:
1)当声明具有自动存储持续时间的变量时 没有初始化器
2)当a创建具有动态存储持续时间的对象时 没有初始化程序的new-expression
3)当未提及基类或非静态数据成员时 一个构造函数初始化列表,并调用该构造函数。 &LT;&LT;&LT; AHA
默认初始化的效果是:
如果T是类类型,则调用默认构造函数来提供 新对象的初始值。
如果T是数组类型,则数组的每个元素都是 默认初始化。否则,什么也没做。
如果T是const限定类型,则它必须是带有a的类类型 用户提供的默认构造函数。
答案 1 :(得分:1)
如果希望使用NULL初始化向量的第一个元素,请使用以下构造函数:
explicit vector ( size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type() );
以下列方式:
adjacency_list( 1, NULL )