C++ 在类构造函数中对向量进行序列化

C++ 在类构造函数中对向量进行序列化,c++,vector,constructor,null,initialization,C++,Vector,Constructor,Null,Initialization,我有一个带有私有属性的类,它是一个向量。我在构造函数中将其初始化为null,如下所示: Graph(int NumberOfVertices):vertices(NumberOfVertices), edges(0), adjacency_list(NULL){}; 向量是 std::vector<Edge *>

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

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

std::vector<Edge *> adjacency_list;
std::向量邻接列表;

程序不工作,但我不确定这是否是错误,是否像我这样初始化向量正确?

如果在类中没有初始化空向量字段,则向量的默认构造函数就足够了。但是,如果您已经知道元素的数量,则可以在构造函数中调整其大小

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的向量无需初始化作为类成员的空
向量
实例

默认初始化在三种情况下执行:

1) 使用声明具有自动存储持续时间的变量时 无初始值设定项

2) 当具有动态存储持续时间的对象由 不带初始值设定项的新表达式

3) 当中未提及基类或非静态数据成员时
构造函数初始值设定项列表,并调用该构造函数 如果希望向量的第一个元素初始化为NULL,请使用以下构造函数:

explicit vector ( size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type() );
以以下方式:

adjacency_list( 1, NULL )

你不需要初始化一个空向量,默认的向量构造器可以很好的完成这个任务。还有,你为什么要使用指针?如果您的目标是共享<代码>顶点>代码>类之间的边的所有权,请考虑使用<代码> STD::SysDypPTR 。或者只是将边表示为顶点对。向量不能为空-它不是指针。(实际上,你用0来初始化,这是NULL扩展到的)你想得到什么?边*是一个边的列表,所以每个边都有一个指向下一个边的指针,而存储在向量中的那个是你的编译器支持C++ 11的ListIf的头,考虑用<代码> STD::转发子列表< /C>代替你的原始指针。