在自定义结构体中:
默认值同变量一样,int型的为0,指针型的为“NULL”------------并不是整个结构体为NULL,其中的int型还是有值0的,只是指针型的为NULL。例如
struct node{
int v,dis;
};
如果需要手动添加构造函数,代码如下:
struct node{
int v,dis;
node(int _v,int _dis):v(_v),dis(_dis){}
};
如果需要对部分数据赋初值,可以使用如下格式 :
struct node{
int id,total,cnt,score[6],flag;
node(){
memset(this->score,-1,sizeof(this->score)); //对数组赋初值
}
};
定义二叉树结点:
struct node{
int data;
node* lchild;
node* rchild;
node(int d):data(d),lchild(NULL),rchild(NULL){}
};
int main()
{
int data=10;
node* root=new node(data); //注意分配空间
return 0;
}
此时可以在定义node型结构体时直接赋初值,但是如果不赋初值则无法通过编译,因为默认构造函数已经修改了,系统不能再默认添加初始值,如果需要保留默认赋初始值的功能,则可以做如下定义。
struct node{
int v,dis;
node(int _v=0,int _dis=0):v(_v),dis(_dis){}
};
此时既保留了默认构造函数赋初始值0,也可以自己手动赋初始值。 参考范例:
#include<cstdio>
#include<vector>
using namespace std;
struct node{
int v,dis;
node(int _v=0,int _dis=0):v(_v),dis(_dis){}
};
vector<node> adj[100];
int main()
{
for(int i=0;i<10;i++)
{
int v,dis;
scanf("%d%d",&v,&dis);
adj[i].push_back(node(v,dis));
}
for(int i=0;i<10;i++)
{
printf("%d %d\n",adj[i].v,adj[i].dis);
}
return 0;
}