在类构造函数中初始化一个向量

时间:2013-11-03 11:40:15

标签: c++ vector constructor null initialization

我有一个带有私有属性的类,它是一个向量。我在构造函数中将其初始化为null,如下所示:

Graph(int NumberOfVertices):vertices(NumberOfVertices),             
                                    edges(0),
                                    adjacency_list(NULL){};

向量是

std::vector<Edge *> adjacency_list;

该程序不起作用,但我不确定这是错误,是否正确初始化我正在做的向量?

2 个答案:

答案 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 )